В интернете огромное количество статей и диаграмм на эту тему, однако, по моему мнению, ни одна из них не позволяет сформировать общее представление об использовании памяти в Java процессе. А без общего представления довольно сложно находить решения конкретных проблем с памятью в сложных системах. В результате, я решил выложить свои диаграммы.
Упрощенная диаграмма использования памяти Java процесса:
Детализированная диаграмма использования памяти Java процесса некоторыми параметрами:
Список параметров JVM для Copy Paste
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintFlagsFinal
-XX:+PrintGCDetails
-Xlog:gc+heap
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+UseG1GC
-XX:+UseShenandoahGC
-XX:+UseZGC
-XX:+UseEpsilonGC
-XX:MinRAMPercentage
-XX:MaxRAMPercentage-Xms
-Xmx
-XX:-AdaptiveSizePolicy
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
-XX:MinMetaspaceFreeRatio
-XX:MaxMetaspaceFreeRatio
-n jvmJavaOSStackSize
-Xss
-XX:VmThreadStackSize
-XX:CompilerThreadStackSize
-XX:+PrintGCDetails
-XX:+TraceClassUnloading
-XX:+TraceClassLoading
-XX:CompressedClassSpaceSize
-XX:-UseCompressedClassPointers
-XX:+PrintStringTableStatistics
-XX:StringTableSize
-XX:+UseStringDeduplication
-XX:+PrintCodeCache
-XX:InitialCodeCacheSize
-XX:ReservedCodeCacheSize
-XX:CodeCacheExpansionSize
-n jvmNativeStackSize
-XX:MaxDirectMemorySize
-XX:NativeMemoryTracking=off | summary | detail
-XX:+PrintNMTStatistics
-XX:-AutoShutdownNMT
-XX:+PrintCompilation
-XX:+UnlockDiagnosticVMOptions
-XX:+LogCompilation
-XX:+PrintFlagsFinal
-XX:CICompilerCount
-XX:CompileThresholdn
-XX:-TieredCompilation
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=9099
-Dcom.sun.management.jmxremote.rmi.port=9099
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=0.0.0.0
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
Краткий список инструментов для диагностики
JProfiler
VisualVM
JConsole
Java Flight Recorder
async-profiler
JDK Mission Control
jstack
jmap
Данные диаграммы не имеют цели дать полные знания, но они могут стать отправной точкой в изучении темы глубже, восполнении пробелов в знаниях, тюнингу JVM и поиску проблемы в текущей системе.