fursa08
@fursa08
Junior Android developer

Как написать программу работающую со сборщиком мусора?

Требуется написать программу на Java, демонстрирующую работу сборщика мусора.
В программе должно быть реализовано следующее:
1. Работа с маленькими объектами и большими объектами (Обычно больше 64 КБ),
2. Финализируемыми объектами,
3. Объектами, пережившими N циклов сборки мусора (N=1,2,3,…),

Подскажете куда копать? Не совсем понимаю как именно это написать
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
Vamp
@Vamp
Задание поставлено очень широко. Листинг из примера ниже будет ему в точности соответствовать:

// Работа с большими объектами
byte[] b = new byte[65536];
b[0] = 1;
System.out.println(b[0]);

// и с маленькими
String s = "123";
System.out.println(s.hashCode());

// и с финализируемыми объектами
Object f = new Object() {
    @Override
    protected void finalize() {
        System.out.println("I'm finalized!");
    }
};
// Строго говоря, объекты b и s так же являются финализируемыми,
// так как наследуют метод finalize() от своего предка.
// Так что f можно было даже не писать.

System.gc();
System.gc();
System.gc();
System.gc();
// В этом месте объекты b, s и f пережили 4 цикла сборки.
// Наверное... ¯\_(ツ)_/¯
//
// Более точно можно сказать, запустив программу с
// аргументом -verbose:gc или с помощью утилиты visualvm
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Dmtm
Android
п.3 это видимо про WeakReference? Но тогда как гарантировать количество циклов очистки?
Ответ написан
@mayton2019
Ent. Software engineer. Oracle. SQL. BigData.
Это сложно потому-что
- сборщики мусора - неуправляемые с точки зрения API (вызов System.GC может ничего не делать или быть заглушкой)
- они разные (G1GC, CMS.... ) и по разному себя ведут.

И тот преподаватель который дал такую задачу должен был уточнить Каким образом он хотел увидеть результат. В противном случае получается игра в "Штурман-прибор-100"

По сути единственную вещь которую вы можете продемонстрировать это OutOfMemoryException.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы