3.2、查看 JVM 垃圾回收器类型的三个方式

文章目录

      • 引题
      • 前言——参数信息命名上的差异
      • 查看 垃圾回收器类型 的三个方法
        • 方法一 PrintCommandLineFlags
        • 方法二(通过GC日志和堆信息)
        • 方法三(通过 jmap -heap vmid)
      • HotSpot JDK 版本和默认垃圾回收器

引题

不同版本 JVM 默认使用的 垃圾回收器是不同的,可以通过一些参数进行选择,那么我们如何得知 JVM 使用的是那些垃圾回收器呢?

前言——参数信息命名上的差异

本文介绍通过 JVM 的参数信息来识别垃圾回收器,这里特别强调的是参数信息中命名和垃圾回收器的名字不是完全对应的。
3.2、查看 JVM 垃圾回收器类型的三个方式_第1张图片

垃圾回收器类型 参数名称
Serial def new generation
ParNew par new generation
Parallel Scavenge PSYoungGen
Parallel Old ParOldGen
CMS concurrent mark-sweep generation
Serial Old(MSC) tenured generation
G1 garbage-first heap
ZGC 还没尝试过。。

查看 垃圾回收器类型 的三个方法

方法一 PrintCommandLineFlags

仅适用于 windows 平台
直接在控制台输入下面的命令行,可以从展示信息中看到 当前机器 JVM 的垃圾回收器类型

java -XX:+PrintCommandLineFlags -version

方法二(通过GC日志和堆信息)

默认情况下,GC 日志和 Heap 信息我们是看不到的,可以通过增加 VM 参数的方式启动。这样当GC 发生时,我们就能看到关于垃圾回收器的相关信息了。

-verbose:gc -XX:+PrintGCDetails 
  • 主动触发垃圾回收事件

人为制造“JVM 垃圾回收事件”

方法三(通过 jmap -heap vmid)

首先通过 jps 或者其它途径(比如 jvisualvm) 获取在运行的一个 JVM 进程id。
然后通过 下面的命令行即可看到堆的相关信息,从而可以看到垃圾回收器的种类。

jps

jmap -heap vmid
  • 应用样例如下
    先运行 jps,需要保持程序处于运行状态——比如写一个 死循环
C:\Users\WuJieJecket>jps
2064 Del
5828 RemoteMavenServer
6308 Launcher
2888
7688 Jps

然后运行 jmap -heap vmid

C:\Users\WuJieJecket>jmap -heap 2064
Attaching to process ID 2064, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09

using thread-local object allocation.
Mark Sweep Compact GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 1606418432 (1532.0MB)
   NewSize                  = 33554432 (32.0MB)
   MaxNewSize               = 535429120 (510.625MB)
   OldSize                  = 67108864 (64.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 30212096 (28.8125MB)
   used     = 2154304 (2.05450439453125MB)
   free     = 28057792 (26.75799560546875MB)
   7.1306009354663775% used
Eden Space:
   capacity = 26869760 (25.625MB)
   used     = 2154304 (2.05450439453125MB)
   free     = 24715456 (23.57049560546875MB)
   8.017578125% used
From Space:
   capacity = 3342336 (3.1875MB)
   used     = 0 (0.0MB)
   free     = 3342336 (3.1875MB)
   0.0% used
To Space:
   capacity = 3342336 (3.1875MB)
   used     = 0 (0.0MB)
   free     = 3342336 (3.1875MB)
   0.0% used
tenured generation:
   capacity = 67108864 (64.0MB)
   used     = 0 (0.0MB)
   free     = 67108864 (64.0MB)
   0.0% used

1753 interned Strings occupying 157280 bytes.

HotSpot JDK 版本和默认垃圾回收器

不同版本、不同模式下 JDK 默认垃圾回收器是不同的,默认情况下32位的hotspot都是client模式,可以修改我server模式;64位的的都是server模式,但是不可修改
关于 JDK server 模式 和 client 模式 可以参考 JVM的server模式和client模式

JDK版本 客户端模式 服务端模式 其他
JDK 7 Serial(新生代)+Serial Old(老年代) Parallel Scavenge(新生代)+Parallel Old(老年代) 如果使用 老年代指定CMS 则新生代默认为 ParNew
JDK 8 Serial(新生代)+Serial Old(老年代) Parallel Scavenge(新生代)+Parallel Old(老年代) 如果使用 老年代指定CMS 则新生代默认为 ParNew
JDK 9 官方未公开32位,故无client,不统计 G1
JDK 10 官方未公开32位,故无client,不统计 G1
之后版本 官方未公开32位,故无client,不统计 G1

你可能感兴趣的:(JVM)