[java] Почему GC не подчищает?

chirrsen

Если оставить один пустой цикл в теле main, то Task Manager показывает, что жрется ~7 000k, а если оставить, как в примере то ~22 000k.
Почему сборщик мусора не подчищает мусор?
 
public class TestGC {

public static void main(String[] args) {

{
StringBuilder sb = new StringBuilder;
for (int i = 0; i<50000; i++)
sb.append("!!!\n");
sb = null;
}

System.gc;

while (true)
{

}
}
}

anton7805

а херли GC должен его подчищать? Процесс схавал всю доступную память что ли?
System.gc;

это всего лишь рекомендация, а не вызов.

chirrsen

это всего лишь рекомендация, а не вызов.
а можно как-нибудь принудительно все это подчистить?

anton7805

а можно как-нибудь принудительно все это подчистить?

нельзя

bleyman

Кстати не факт.
Не знаю, как в жаве, в шарпе gc.Collect вполне себе вызов, но вот практически наверняка мемори менеджер и не подумает отдать освобождённую память обратно системе. А зачем? Я даже не уверен, что такая возможность на всех платформах присутствует.

kruzer25

но вот практически наверняка мемори менеджер и не подумает отдать освобождённую память обратно системе.
Ну так и есть.
Надо не смотреть на использование памяти в Task Manager-е после очистки, а попробовать создать ещё чего-нибудь на 15М и посмотреть, будет в Task Manager-е написано про 22М или про 37М.

katrin2201

Кстати не факт.
Факт. Популярный вопрос на собеседованиях среди джавистов. По текущим спецификациям _заставить_ гц сделать цикл нельзя. Можно лишь "посоветовать".
Не знаю, как в жаве, в шарпе gc.Collect вполне себе вызов, но вот практически наверняка мемори менеджер и не подумает отдать освобождённую память обратно системе. А зачем? Я даже не уверен, что такая возможность на всех платформах присутствует.
Симметрично и в джаве. Если в куче освободилось место, то совсем не факт, что оно будет отдано обратно системе.
Автору треда: мемеори лики по таск манагеру не просечешь, юзать надо профилирующие инструменты.

chirrsen

мемеори лики по таск манагеру не просечешь, юзать надо профилирующие инструменты.
Тогда вопрос, на какие инструменты лучше посмотреть?

katrin2201

Тогда вопрос, на какие инструменты лучше посмотреть?
Посмотреть сначала на плугины/аддоны к своей любимой среде.
В идее есть JProfiler, правда платный, еще пара бесплатных, но победнее функционалом.
Насчет эклипса не знаю - погугли.
Если это все не нравится - хорошый профайлер есть под НетБинс (http://profiler.netbeans.org/).

SPARTAK3959

JProfiler умеет создавать кнопку для своего вызова в eclipse.
Оставить комментарий
Имя или ник:
Комментарий: