В моей 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 МБ
и я использую jcmd для проверки памяти процесса
общий объем составляет около 200 МБ, так почему же физическая память, используемая процессом java, увеличивается до размера, намного превышающего вывод jcmd?
Я использую Java 8.