У меня значительная утечка памяти в моем приложении. Я запустил jmap, и он говорит, что в настоящее время существуют следующие объекты, которых не должно быть (и которые являются основным источником утечки):
java.lang.management.MemoryUsage - 3938500 instances, 189048000 bytes
[Ljava.lang.management.MemoryUsage - 787700 instances, 31508000 bytes
com.sun.management.GCInfo - 293850 instances, 22055600 bytes
sun.management.GCInfoCompositeData - 393850 instances, 12603200 bytes
Я не использую эти объекты напрямую. Однако они используются сборщиком мусора.
Я использую:
Java version: 1.7.0-b147
VM version: Java Hotspot(TM) 64-bit Server VM (build 21.0-b17, mixed mode)
The application is run in Jetty version 7.3.1
В настоящее время я использую параллельный сборщик мусора с низкой паузой. Однако у меня была такая же проблема даже при запуске сборщика пропускной способности.
У вас есть идея, почему эти объекты остаются в памяти? Что бы вы предложили сделать?
ОБНОВЛЕНИЕ: утечка памяти все еще происходит при обновлении 1 Java 1.7 (1.7.0_01-b08, 64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 21.1-b02, смешанный режим))
ОБНОВЛЕНИЕ 2: утечка памяти вызвана JConsole. До запуска JConosole не было ни одного экземпляра классов, упомянутых выше. Как только я подключаюсь к приложению с помощью JConsole, объекты начинают появляться в памяти и остаются там навсегда. После завершения работы JConsole объекты все еще находятся в памяти, и их количество увеличивается до тех пор, пока приложение не будет закрыто.