 |
Цитата: |
 |
|
|
|
|
|
|
|
|
|
|
Сборщик мусора - весьма загадочная штука.
|
|
 |
|
 |
|
Это можно лекго проверить, сделаем для этого простой класс со статическими переменными...
Код:
class Nowa {
static int created = 0;
static int finalized = 0;
int i;
Nowa() {
i = ++created;
System.out.println("Object NOWA created: " + i);
}
public void finalize() {
finalized++;
}
}
Как это работает?
При вызове конструктора мы увеличиваем статическую переменную и пишем в консоль, какой по счёту объект мы создали.
А в методе finalize() [Кто не знает, он вызывается перед уборкой мусора]
увеличиваем другую статическую переменную, что бы узнать, а сколько раз был вызван этот метод,
или другими словами, сколько раз сборщик мусора прошёлся по нашему объекту безжалостно
его уничтожая и освобождая такую нужную память, для более высоких дел ...
Теперь вернёмся к нашей задаче и попробуем разобраться, а сколько
объектов будет доступно для garbage collector после выполнения цикла в main?
Код:
public class Garbage {
public static void main(String[] args) {
for (int i = 1; i < 5; i++) {
Nowa nowa = new Nowa();
}
System.gc();
System.out.println("Total finalized = " + Nowa.finalized);
}
}
Ну и кого сколько получилось?
