Більшу частину часу у корпоративних програмах відведена купа Java перевищує ідеальний розмір від 12 до 16 ГБ. Мені важко змусити NetBeans-профілера працювати безпосередньо над цими великими програмами Java.
Але зазвичай це не потрібно. Ви можете скористатися утилітою jmap, яка постачається разом з jdk, щоб взяти "живий" відвал купи, тобто jmap скидає купу після запуску GC. Виконайте деяку операцію над програмою, дочекайтеся завершення операції, а потім зробіть ще один "живий" відвал купи. Використовуйте такі інструменти, як Eclipse MAT для завантаження кущів, сортуйте на гістограмі, дивіться, які об’єкти збільшились чи які є найвищими, це дало б підказку.
su proceeuser
/bin/jmap -dump:live,format=b,file=/tmp/2930javaheap.hrpof 2930(pid of process)
З цим підходом існує лише одна проблема; Величезні породні купи, навіть за умови живого вибору, можуть бути занадто великими, щоб перенести їх на колеги розробки, і може знадобитися машина з достатньою кількістю пам'яті / оперативної пам’яті, щоб відкрити.
Саме тут в картину входить гістограма класу. За допомогою інструменту jmap можна скинути гістограму в реальному класі. Це дасть лише гістограму класу використання пам'яті. В основному у неї не буде інформації для ланцюга посилань. Наприклад, він може поставити масив char вгорі. І клас струн десь внизу. Ви повинні самостійно провести зв’язок.
jdk/jdk1.6.0_38/bin/jmap -histo:live 60030 > /tmp/60030istolive1330.txt
Замість того, щоб взяти два відвали, візьміть дві класи гістограми, як описано вище; Потім порівняйте гістограми класів і побачите класи, які збільшуються. Подивіться, чи можете ви пов’язати класи Java з класами додатків. Це дасть досить хороший натяк. Ось сценарій пітонів, який може допомогти вам порівняти два звалища гістограми jmap. histogramparser.py
Нарешті такі інструменти, як JConolse та VisualVm, є важливими для того, щоб побачити зростання пам’яті з часом та побачити, чи є витік пам’яті. Нарешті, іноді вашою проблемою може бути не витік пам’яті, а високе використання пам’яті. Для цього ввімкніть журнал GC; використовуйте більш досконалий та новий компактний GC, наприклад G1GC; і ви можете використовувати jdk інструменти, такі як jstat, щоб побачити поведінку GC в прямому ефірі
jstat -gccause pid <optional time interval>
Інші референції для google для -jhat, jmap, Full GC, розподіл Humongous, G1GC