Il existe de nombreux articles et diagrammes sur ce sujet sur Internet, cependant, à mon avis, aucun d'entre eux ne permet de se faire une idée générale de l'utilisation de la mémoire dans le processus Java. Et sans une compréhension générale, il est difficile de trouver des solutions à des problèmes de mémoire spécifiques dans des systèmes complexes. En conséquence, j'ai décidé d'afficher mes schémas.
Schéma simplifié de l'utilisation de la mémoire Java d'un processus:
Diagramme détaillé de l'utilisation de la mémoire Java d'un processus par certains paramètres:
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
Ces diagrammes ne sont pas destinés à fournir des connaissances complètes, mais ils peuvent être un point de départ pour explorer le sujet plus en profondeur, combler les lacunes dans les connaissances, régler la JVM et trouver le problème dans le système actuel.