/ / Защо този код не причинява изчерпване на паметта на компютъра ми? - java, windows-7, събиране на боклук

Защо този код не причинява изчерпване на паметта на компютъра ми? - java, windows-7, събиране на боклук

Докато играех с нещо, се натъкнах на нещо такова. Това парче код не води до изчерпване на паметта ми.

while(true)
{
Person p=new Person();
}

Освен ако събирането на отпадъци не се извършва на всеки няколко секунди, не мога да кажа защо използването на паметта ми (в диспечера на задачи) не става.

Също така събирането на боклук в Java работи често? Или мениджърът на задачите в прозорците не върши добра работа при показването на използването на паметта?

Актуализация: Наблюдавах го с Java Visual VM. Колекторът на боклука никога не е бил активиран в рамките на няколко минути, когато го бях тичал.

Отговори:

6 за отговор № 1

GC знае кога да работи, работи, когато трябва да го направи, обхвата (времетраенето) на Person е прекалено кратък и GC ще го помита, докато е в пространството Eden и дори няма да бъде популяризирано за по-стари поколения.


1 за отговор № 2

Събирането на боклук в Java ще се изпълнява по съществотолкова често, колкото е необходимо. Когато купчината се напълни, GC ще се случи. Ако не разпределите, GC няма да тече, ако не направите нищо друго освен да разпределите, GC ще работи доста често. Още повече, Java няма да излезе OutOfMemoryError, без да се опитва първо да стартира GC.

Съвместният технологичен институт може също така в някои случаи да разпознае кога даден обект ясно изпада извън приложното поле или е необходим само на местно равнище и в този случай може да разпределя стека, без изобщо да изисква GC.


0 за отговор № 3

във всеки цикъл, който създавате и унищожаватето. В боклука има само свободна памет, когато е необходимо. Ако искате да направите грешка в паметта, само трябва да създадете ArrayList извън времето и в същото време да добавите човек към ArrayList.