Ожидание завершения работы сборщика мусора
Как проверить состояние сборщика мусора в определенный момент времени? Из-за того, что (насколько я понимаю) он работает в другом потоке - вызов System.gc(); не ожидает завершения работы и сразу переходит к следующему оператору.
Test a;
for (int i=0;i++<10;) a = new Test(); // Тут я перезаписываю в одну ссылку много объектов дабы потом использовать сборщик
System.gc(); // Вызов сборщика
System.out.println(Test.geta()); // Выведение статичной переменной a (количество обьектов), должно выводить 0, но выводит 10
Код представленный ниже - из класса Test, в переменной а (статическая, приватная) хранится количество объектов этого типа на данный момент времени
Test(){
++a;
// ...
}
protected void finalize() {
// ...
--a;
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Метод finalize может быть вызван тогда, когда gc захочет. Может и никогда. У Вас нет официального способа так просто его заставить вызываться. Java имеет полное право игнорировать вызов gc. Хотите больше контроля - пишите свой gc или переходите на другие языки