#java #сборщик_мусора
Работает пока GC не удалит объект, на который есть только "мягкая" (monkey) ссылка. Два вопроса: Почему иногда вылетает OutOfMemoryError, а иногда нет? Вылетает тогда, когда GC не справляется со своей работой или я что-то не так понял? От чего зависит продолжительность работы программы? Запускал на 3-х компах по 5-7 раз: на одном ПК работает ~150сек(всегда вылетает OutOfMemoryError), на втором ПК работает по ~450-500сек(иногда не вылетает, OutOfMemoryError), на третьем ПК работает ~60сек(всегда вылетал OutOfMemoryError). На всех ПК по 8гб оперативной памяти. public class Solution { public static Helper helper = new Helper(); public static class Monkey { private String name; public Monkey(String name) { this.name = name; } @Override protected void finalize() { Helper.isFinalized = true; System.out.format("Bye-Bye, %s!\n", name); } } public static void main(String args[]) throws InterruptedException { helper.startTime(); Monkey monkey = new Monkey("Simka"); SoftReferencereference = new SoftReference<>(monkey); helper.callGC(); monkey = null; helper.callGC(); helper.heapConsuming(); if (reference.get() == null) System.out.println("Finalized"); helper.finish(); } public static class Helper { public static boolean isFinalized; private long startTime; void startTime() { this.startTime = System.currentTimeMillis(); } int getTime() { return (int) (System.currentTimeMillis() - startTime) / 1000; } void callGC() throws InterruptedException { System.gc(); Thread.sleep(1000); } void heapConsuming() { try { List heap = new ArrayList (100000); while (!isFinalized) { heap.add(new Solution()); } } catch (OutOfMemoryError e) { System.out.println("Out of memory error raised"); } } public void finish() { System.out.println("Done"); System.out.println("It took " + getTime() + " sec"); } } }
Ответы
Ответ 1
Дюк, вынеси мусор Вот ссылка. Можно прочесть весь цикл статей, про все сборщики мусора, которые предоставляет Java HotSpot VM. Оттуда станет понятно, когда запускается сборщик мусора, как работает, и немного станет яснее о внутреннем устройстве разных GC.
Комментариев нет:
Отправить комментарий