почему процесс java потребляет намного больше памяти, чем вывод jcmd? - PullRequest
0 голосов
/ 10 мая 2018

В моей java-программе я использую java nio для связи с другим процессом, и мой код не выделяет никакого прямого ByteBuffer. Мой код использует lib с открытым исходным кодом для связи с другим процессом с сокетом домена unix: https://github.com/jnr/jnr-unixsocket и я использую некоторые параметры jvm, чтобы ограничить объем памяти:

-Djdk.nio.maxCachedBufferSize = 262144 -Xms80m -Xmx80m -Xmn40m -Xss256k -XX: NativeMemoryTracking = detail -XX: + UnlockDiagnosticVMOptions -XX: + PrintNMTStatistics -XX = 40X: -Mize: -Maspace: MaxSpace: -Max: -Size MaxDirectMemorySize = 10m -XX: SurvivorRatio = 2 -XX: TargetSurvivorRatio = 90 -XX: + UseConcMarkSweepGC -XX: ParallelGCThreads = 8 -XX: Макс. : + UseCMSCompactAtFullCollection -XX: + CMSPermGenSweepingEnabled -XX: CMSInitiatingOccupancyFraction = 50 -XX: + CMSClassUnloadingEnabled -XX: + DisableExplicitGC -verbose: gc -XX + + PrintXXtail:

как через несколько часов размер java-процесса увеличивается до 400 МБ enter image description here

и я использую jcmd для проверки памяти процесса enter image description here

общий объем составляет около 200 МБ, так почему же физическая память, используемая процессом java, увеличивается до размера, намного превышающего вывод jcmd?

Я использую Java 8.

...