Ако използването на паметта на Heap, показано в JConsole, обикновено се връща на 0 след GC, няма ли изтичане на памет?

Опитвам се да използвам JConsole, за да установя дали имам изтичане на памет или не.

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

След всичко това, ако натисна "Perform GC" няколко пъти в Jconsole и зелената графика на паметта "Heap" се върне на 0-- означава ли това, ако приемем, че целият код е бил изпълнен няколко пъти, че аз (вероятно) не имате изтичане на памет?

Или паметта може да бъде изтекла другаде освен купчината?


person RonR    schedule 25.02.2015    source източник


Отговори (1)


Виждам някои възможности:

  • Не затворени връзки
  • Карти с ключове, които имат грешно внедрен метод hashCode/equals
  • в WebApps: Данни, съхранявани в сесии
  • clean-up-code не се изпълнява поради изключения --> През повечето време тези течове се случват в производството, защото им трябва време „да се натрупат“ или специални ситуации: Няма налична база данни, ....

Вашият тест е добър знак, но не е гаранция.

person Jordi Laforge    schedule 25.02.2015
comment
Не забравяйте течовете на конци. И изтичане на classloader, но те са специални. - person David Ehrmann; 25.02.2015