如何检查 JVM 正在使用哪个 GC?

fiv*_*nts 1 garbage-collection jvm

我正在运行服务器(oracle/sun)JVM,如何检查它在运行时使用哪个 GC?例如,如果使用 UseG1GC,则使用 UseConcMarkSweepGC。(jdk为1.7_79)

我知道我可以使用来jinfo <pid>检查输出中的虚拟机标志。但是如果 JVM 在没有这些参数的情况下启动怎么办?

我也找不到这个信息jvisualvm

Md *_*ker 5

使用 JMap。

jMap - 使用 -heap 选项启动此工具并查找专用于垃圾收集器类型的字符串。喜欢

$ jmap -heap 30166
Attaching to process ID 30166, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.80-b11

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 4294967296 (4096.0MB)
   NewSize          = 1431633920 (1365.3125MB)
   MaxNewSize       = 1431633920 (1365.3125MB)
   OldSize          = 2863267840 (2730.625MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 1288503296 (1228.8125MB)
   used     = 339354840 (323.63399505615234MB)
   free     = 949148456 (905.1785049438477MB)
   26.337134026236903% used
Eden Space:
   capacity = 1145372672 (1092.3125MB)
   used     = 313863536 (299.32359313964844MB)
   free     = 831509136 (792.9889068603516MB)
   27.402743550005006% used
From Space:
   capacity = 143130624 (136.5MB)
   used     = 25491304 (24.310401916503906MB)
   free     = 117639320 (112.1895980834961MB)
   17.809818253849016% used
To Space:
   capacity = 143130624 (136.5MB)
   used     = 0 (0.0MB)
   free     = 143130624 (136.5MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 2863333376 (2730.6875MB)
   used     = 0 (0.0MB)
   free     = 2863333376 (2730.6875MB)
   0.0% used
Perm Generation:
   capacity = 23920640 (22.8125MB)
   used     = 23801432 (22.698814392089844MB)
   free     = 119208 (0.11368560791015625MB)
   99.5016521297089% used

10243 interned Strings occupying 814216 bytes.
Run Code Online (Sandbox Code Playgroud)