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

引题

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

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

本文介绍通过 JVM 的参数信息来识别垃圾回收器,这里特别强调的是参数信息中命名和垃圾回收器的名字不是完全对应的。
在这里插入图片描述

垃圾回收器类型参数名称
Serialdef new generation
ParNewpar new generation
Parallel ScavengePSYoungGen
Parallel OldParOldGen
CMSconcurrent mark-sweep generation
Serial Old(MSC)tenured generation
G1garbage-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 7Serial(新生代)+Serial Old(老年代)Parallel Scavenge(新生代)+Parallel Old(老年代)如果使用 老年代指定CMS 则新生代默认为 ParNew
JDK 8Serial(新生代)+Serial Old(老年代)Parallel Scavenge(新生代)+Parallel Old(老年代)如果使用 老年代指定CMS 则新生代默认为 ParNew
JDK 9官方未公开32位,故无client,不统计G1
JDK 10官方未公开32位,故无client,不统计G1
直到 JDK15官方未公开32位,故无client,不统计G1
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页