12 фев 2013 02:56Добър ден. Никога не съм мислил как работи Garbage Collector, докато не ми се наложи. При нужда разбрах, че не мога да го принудя да изчисти паметта (изтрие несъществуващи връзки). Ето прост пример: изпълняване на приложението при отстраняване на грешки: Преди цикъла, който създава 17M . препратки към обекти и пълнени в колекцията, зададох точка на прекъсване. Преди цикъла приложението заема 80 000 KB - това вече е много, но ще си затварям очите за това, т.к. в приложението дори преди цикъла се създават много препратки към обекти, използва се хибернация и т.н. обекти. След това се опитваме да изчистим паметта: 1. Изчистване на колекцията чрез извикване на objectList.clear() - не помага, все още GIG. 2. Ние напълно унищожаваме препратката към колекцията objectList = null; - не помага, все още GIG. 3. Опитваме се да извикаме Garbage Collector насила - System.gc() - 8KB се освобождават при едно извикване - но това е много малко, като се има предвид, че едно извикване на System.gc() отнема цели 0,1 сек. 4. Извикваме System.gc () в цикъл 100, 200, 300, 1000 пъти - не помага. Не само това, трябва да изчакате цели 10 секунди. за 100 разговора и паметта не е изчистена до първоначалния си размер. Мениджърът показва 850 000 KB - това е много.
Някой може ли да даде съвет как бързо да изчистите паметта до първоначалната начална точка - 80 000 KB? И възможно ли е по принцип?