2016-02-03 6 views
1

моего приложения Java, всегда нужно больше и больше памяти (начиная с ~ 40MB, через 2 дня около 140MB)утечки памяти Java

я использовал

./jmap -histo 17364 | head -10 
num  #instances   #bytes class name 
---------------------------------------------- 
    1:  1814362  68884536 [C 
    2:  1813805  29020880 java.lang.String 
    3:   1604  9989632 [B 
    4:   1333   266184 [I 
    5:   5769   250376 [Ljava.lang.Object; 
    6:   2410   235720 java.lang.Class 
    7:   2982   119280 java.util.HashMap 

, чтобы получить ощущение того, что выделяет эту память , Есть ли способ обнаружить, в котором действительный класс java использует эти char-массивы и строки?

+4

Вы можете попытаться использовать профилировщик. Также измените настройки GC по причине увеличения объема памяти, как вы запускаете приложение? – kunpapa

+0

Попробуйте VisualVm. https://visualvm.java.net/ – KostasC

+0

Старт может состоять в том, чтобы искать места, где используется «новая строка» или «новый символ []». Затем проверьте, могут ли быть утечки ссылок на них. Но профилировщик, как предлагает кунпапа, - ваш лучший шанс. – Fildor

ответ

0

Вам нужно сделать анализ кучи, создать кучу дампа, используя jmap -dump: file = fileLocation PID, после чего вы можете открыть сгенерированный кучи кучи, используя Eclipse MAT.