Народ, а может кто-нибудь подробно объяснить, что имеено происходит при запуске этого кода?
Максим
41 уровень
Что происходит при запуске?
Обсуждается
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Алексей Клоков
12 ноября 2019, 23:17
1) хелпер запомитает текщее время
2) Создается объект Monkey и ссылка на него присваивается переменно класса Monkey.
3) Копирует ссылку на объект monkey в переменную класса SoftReference у которой дженерик тип - Monkey (сохраняет ссылки только на Monkey)
4) хелпер вызывает сборку мусора и ждет 1 сек
5) обнуляем ссылку на monkey (остается только мягкая ссылка)
6) хелпер опять вызывает сборку мусора и ждет 1 сек (на данном этапе сборщик мусора не будет удалять мягкую ссылку. Он удалит ее только в том случае, когда у JVM закончится доступная память и она выкинет OutOfMemoryError.)
7) helper вызывает метод consumeHeap, который в бесконечном цикле пытается засрать память JVM объектами класса Solution
Суть в следующем:
>> GC гарантировано удалит из памяти все объекты, доступные только по мягкой ссылке, перед тем как JVM выбросит OutOfMemoryError и тем самым попробует спасти ее от завершения работы.
+14