当前位置: 首页 > news >正文

【JVM基础内容速查表】JVM基础知识 默认参数 GC命令 工具使用 JVM参数设置、说明、使用方法、注意事项等(持续更新)

目录

    • 一、JVM前置知识
        • 1. -X、-XX含义
        • 2. JVM参数值的类型和设置方式
        • 3. 查看GC时用到的命令和JVM参数
        • 4. 查看JVM默认参数
    • 二、垃圾收集器选择
        • -XX:+UseSerialGC
        • -XX:+UseParallelGC
        • -XX:+UseParallelOldGC
        • -XX:+UseParNewGC
        • -XX:+UseConcMarkSweepGC
        • -XX:+UseG1GC
    • 三、垃圾收集器特有参数
      • 1. ParNew
        • -XX:ParallelGCThreads=
      • 2. Parallel Scavenge
        • -XX:MaxGCPauseMillis=
        • -XX:GCTimeRatio=
        • -XX:+/-UseAdaptiveSizePolicy
    • 四、内存设置
        • -Xmx | -XX:MaxHeapSize=
        • -Xms | -XX:InitialHeapSize=
        • -Xmn | -XX:NewSize= | -XX:MaxNewSize=
        • -Xss | -XX:ThreadStackSize=
        • -XX:MetaspaceSize= | -XX:MaxMetaspaceSize= ——-XX:PermSize= | -XX:MaxPermSize=
    • 五、内存分配策略
        • -XX:FieldsAllocationStyle=
        • -XX:+/-CompactFields
        • -XX:+/-UseTLAB
        • -XX:MinHeapFreeRatio= | -XX:MaxHeapFreeRatio=
    • 六、内存分析
        • -XX:+/-HeapDumpOnOutOfMemoryError
        • -XX:+/-TraceClassLoading
        • -XX:+/-TraceClassUnloading
        • -Xloggc:filename & -XX:+/-PrintGC等GC日志打印相关参数
    • 参考


【JVM学习笔记】JVM内存区域定义与内存结构

【JVM学习笔记】对象的创建过程、 对象的内存布局、 如何定位和使用对象

【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明

HotSpot VM垃圾收集器——Serial Parallel CMS G1垃圾收集器的JVM参数、使用说明、GC分析




一、JVM前置知识


1. -X、-XX含义

参数前缀含义
我们所有的JVM参数实际上,都是通过java命令传递的,也就是说,任何jvm参数实际上都是Java命令的一部分。

Java命令实际上包含的种类有很多,我们可以通过Java -h查看全部可用的命令。

语法

  • java [options] classname [args]
  • java [options] -jar filename [args]
  • javaw [options] classname [args]
  • javaw [options] -jar filename [args]

在这里插入图片描述

JVM参数即是java命令中的【-options】,Options支持的部分类型如下:

  • 【-】标准选项(Standard Options):保证所有Java虚拟机(JVM)的实现都支持标准选项。它们用于常见操作,例如检查JRE版本、设置类路径、启用详细输出等等,可以通过“java -h”查看可用标准选项。

  • 【-X】非标准选项(Non-Standard Options)是特定于Java HotSpot虚拟机的,因此不保证其它虚拟机实现支持该参数,并且在以后的JDK版本中不会通知其变更(某个版本不生效或含义变更时不做特别说明),可以通过“java -X”查看可用的非标准选项。

  • 【-XX】高级选项(Advanced Options),这些选项可以控制Java HotSpot虚拟机运行时的行为。这些是开发人员选项,用于为HotSpot虚拟机在特定领域的调优操作,这些领域通常具有特定的系统需求,可能需要对系统配置参数的特权访问。它们也不能保证得到所有JVM实现的支持,而且可能会发生变化。



2. JVM参数值的类型和设置方式

注:如果同时设置相同或同种功能的参数,那么在命令行中后设置的值才会生效。即“-Xmx=2m -XX:MaxHeapSize=4m”,生效的值是4m。

-X与-XX的参数类型和设置方式相同,这里以-XX为例

1. 布尔值

参数形式:-XX:+/-<option>
开启:-XX:+<option>
关闭:-XX:-<option>
例如:-XX:+UseSerialGC

2. 数值

参数形式:-XX:<option><number> | -XX:<option>=<number> (这两种形式并不互通,依照具体的参数选择使用那种形式,下文中以有无=号区分)
值单位:无(byte)、K(kb)、M(mb)、G(gb)
例如:-Xmx32M, -XX:MaxNewSize=32k(32 * 1024 = 32768(b))

3. 字符

参数形式: -XX:<option>=<string>
说明:设置字符值,一般用于设置文件、地址和命令



3. 查看GC时用到的命令和JVM参数

1. 查看当前机器上默认JVM参数

java -XX:+PrintCommandLineFlags -version


2. 查看指定运行程序的JVM参数(如果设置了JVM参数,将会覆盖上面的默认值)

jinfo -flags <pid>
查询指定参数(options)设置:jinfo -flag <options> <pid>


3. 通过jmap查看用了哪种算法的收集器
jmap -heap <pid>
Windows:jmap -heap <pid> | findstr GC
Linux:jmap -heap <pid> | grep GC


4. 通过jcmd强制gc
jcmd <pid> GC.run
注:可以通过jcmd <pid> help来查看程序可以执行的命令


5. 查看GC日志,方便查看GC时使用了什么收集器和收集时的内存信息(JDK8,JDK9后使用-Xlog参数打印日志)

-XX:+PrintGC:打印GC时的基本信息
-XX:+PrintGCDetails:打印GC详细信息
-XX:+PrintHeapAtGC:打印GC前后的堆、方法区可用容量的变化
-XX:+PrintGCTimeStamps**:打印GC时间戳


已经启动的Java程序,可以通过下面的命令启用上述参数:
jinfo -flag +PrintGC <pid>



4. 查看JVM默认参数

JVM默认参数会因为系统、内存大小、jdk版本、vm等内容的不同,而产生不同的默认值,所以你看到的值可能如下面的值有部分差异。


本机配置信息
内存:16GB
操作系统:WIN10 x64
JDK版本:1.8.0_171
VM:Java HotSpot™ 64-Bit Server VM


查看默认JVM参数设置

D:\Project>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=257905728 -XX:MaxHeapSize=4126491648 -XX:+PrintCommandLineFlags 
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation 
-XX:+UseParallelGC
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

查看默认内存配置

# 查看pid
jps -l
# 查看heap信息
jmap -heap 2028

得到如下的默认内存配置信息:

Heap Configuration:MinHeapFreeRatio         = 0							// 闲置堆空间的最小百分比,默认40MaxHeapFreeRatio         = 100						// 闲置堆空间的最大百分比,默认70MaxHeapSize              = 4127195136 (3936.0MB) 	// 最大堆空间,默认1/4内存NewSize                  = 85983232 (82.0MB)			// 当前新生代大小MaxNewSize               = 1375731712 (1312.0MB)		// 新生代最大值,根据堆大小和NewRatio来决定OldSize                  = 171966464 (164.0MB)		// 当前老年代大小NewRatio                 = 2 						// old/new的比例,默认2SurvivorRatio            = 8							// eden/survivor的比例,默认8MetaspaceSize            = 21807104 (20.796875MB) 	// 当前元空间大小CompressedClassSpaceSize = 1073741824 (1024.0MB)		// 类压缩空间,默认1G,-XX:CompressedClassSpaceSize指定,大小受限于MaxMetespaceSizeMaxMetaspaceSize         = 17592186044415 MB 		// 允许的最大元空间,如果不设置元空间大小,默认无限大G1HeapRegionSize         = 0 (0.0MB)					// G1垃圾收集器中每个区域的大小(启动G1时才生效)





二、垃圾收集器选择

参考该文:HotSpot VM垃圾收集器——Serial Parallel CMS G1垃圾收集器的JVM参数、使用说明、GC分析

-XX:+UseSerialGC

启用组合:Serail Young (DefNew) + Serial Old Mark Sweep Compact

查看启用参数和GC内容:

D:\Project>jinfo -flag UseSerialGC 4288
-XX:+UseSerialGCD:\Project>jmap -heap 4288 | findstr "GC"
Mark Sweep Compact GC

查看GC收集器详情:

D:\Project>jcmd 4288 GC.run
4288:
Command executed successfully325.368: [Full GC (System.gc()) 325.368: [Tenured: 32742K->32744K(349568K), 0.0769539 secs] 38309K->32744K(506816K), [Metaspace: 57305K->57305K(1101824K)], 0.0770048 secs] 
[Times: user=0.08 sys=0.00, real=0.08 secs] 
  • Full GC (System.gc()):表明本次Full GC的原因是执行了System.gc()命令。

  • Tenured:老年代收集,一般表明老年代使用的是Serial Old收集器。

  • Metaspace:元空间收集情况,元空间为非堆,它是位于堆外的一块内存。

  • Times:本次GC所用时间。



-XX:+UseParallelGC

启用组合:Parallel Young (PSYoungGen、Parallel Scavenge) + Serial Old Mark Sweep Compact | Parallel Old Mark Sweep Compact

该JVM参数启用了Parallel Scavenge收集器,同时其老年代收集器默认为Parallel Old,可以通过设置参数来组合其它老年代的收集器。

查看启用参数和GC内容:

D:\Project>jinfo -flag UseParallelGC 15404
-XX:+UseParallelGCD:\Project>jmap -heap 15404 | findstr "GC"
Parallel GC with 10 thread(s)

查看GC收集器详情:

D:\Project>jcmd 15404GC.run
15404:
Command executed successfully76.217: [GC (System.gc()) [PSYoungGen: 2870K->288K(140288K)] 35650K->33075K(489984K), 0.0026375 secs] 
[Times: user=0.00 sys=0.00, real=0.00 secs] 76.220: 
[Full GC (System.gc()) [PSYoungGen: 288K->0K(140288K)] [ParOldGen: 32787K->31310K(349696K)] 33075K->31310K(489984K), [Metaspace: 57241K->57241K(1101824K)], 0.0767850 secs] 
[Times: user=0.22 sys=0.00, real=0.08 secs] 



-XX:+UseParallelOldGC

启用组合:Serail Young (DefNew) | Parallel Young (PSYoungGen、Parallel Scavenge) | Parallel Young (ParNew)
+ Parallel Old Mark Sweep Compact

  • JDK 6时才提供Parallel Old收集器。
  • 该JVM参数,仅启用了Parallel Old收集器,新生代收集器会根据JVM默认参数来设置,也可以通过其它JVM参数指定新生代收集器。
  • 我的机器默认使用了UseParallelGC参数,所以新生代为PSYoungGen。

查看启用参数和GC内容:

D:\Project>jinfo -flag UseParallelOldGC 4964
-XX:+UseParallelOldGCD:\Project>jmap -heap 4964 | findstr "GC"
Parallel GC with 10 thread(s)

查看GC收集器详情:

D:\Project>jcmd 4964 GC.run
4964:
Command executed successfully675.850: [GC (System.gc()) [PSYoungGen: 3065K->224K(141312K)] 29892K->27050K(491008K), 0.0026659 secs] 
[Times: user=0.00 sys=0.00, real=0.00 secs]675.852: [Full GC (System.gc()) [PSYoungGen: 224K->0K(141312K)] [ParOldGen: 26826K->26795K(349696K)] 27050K->26795K(491008K), [Metaspace: 56938K->56938K(1101824K)], 0.1212485 secs] 
[Times: user=0.27 sys=0.00, real=0.12 secs] 



-XX:+UseParNewGC

启用组合:Parallel Young (ParNew)
+ Serial Old Mark Sweep Compact | Parallel Old Mark Sweep Compact | Concurrent Mark Sweep (Old)

  • 除了Serial收集器外,目前只有它能与CMS收集器配合工作。
  • ParNew + CMS与ParNew + Serial Old组合,在JDK8被宣布废弃,JDK9取消了对该组合的支持。
  • -XX:+UseParNewGC参数也在JDK9后被直接取消了。

查看启用参数和GC内容:

D:\Project>jinfo -flag UseParNewGC 20052
-XX:+UseParNewGCD:\Project>jmap -heap 20052 | findstr "GC"
Mark Sweep Compact GC

查看GC收集器详情(与serial别无二致,打印的GC日志都一样):

D:\Project>jcmd 20052 GC.run
20052:
Command executed successfully16.495: [GC (Allocation Failure) 16.495: [ParNew: 156622K->9790K(157248K), 0.0050190 secs] 213221K->66389K(506816K), 0.0050597 secs] 
[Times: user=0.00 sys=0.00, real=0.00 secs] 89.628: [Full GC (System.gc()) 89.628: [Tenured: 50767K->32723K(349568K), 0.0939450 secs] 83372K->32723K(506816K), [Metaspace: 57211K->57211K(1101824K)], 0.0940025 secs] 
[Times: user=0.09 sys=0.00, real=0.09 secs] 

GC (Allocation Failure):表明本次GC的原因是内存分配失败导致的GC,从而进行的新生代垃圾收集(mirrorGC或称youngGC),如果GC后,内存仍无法分配就会尝试对堆进行扩容,如果已到堆的最大容量,那么将进行整堆收集。整堆收集后仍无法为对象分配内存时,就会抛出OOM异常。



-XX:+UseConcMarkSweepGC

启用组合:Serial Young (DefNew) | Parallel Young (ParNew) + Concurrent Mark Sweep (Old)

  • CMS的默认新生代为ParNew。
  • ParNew + CMS的组合在JDK8被宣布废弃,JDK9取消了对该组合的支持

查看启用参数和GC内容:

D:\Project>jinfo -flag UseConcMarkSweepGC 7156
-XX:+UseConcMarkSweepGCD:\Project>jmap -heap 7156 | findstr "GC"
Concurrent Mark-Sweep GC

查看GC收集器详情:

D:\Project>jcmd 7156 GC.run
7156:
Command executed successfully18.303: [GC (Allocation Failure) 18.303: [ParNew: 153906K->13619K(157248K), 0.0094748 secs] 159600K->23724K(506816K), 0.0095149 secs] 
[Times: user=0.02 sys=0.00, real=0.01 secs] 111.118: [Full GC (System.gc()) 111.118: [CMS: 35564K->31991K(349568K), 0.0956757 secs] 37072K->31991K(506816K), [Metaspace: 57246K->57246K(1101824K)], 0.0957642 secs] 
[Times: user=0.09 sys=0.00, real=0.10 secs]



-XX:+UseG1GC

启用G1收集器

查看启用参数和GC内容:

D:\Project>jinfo -flag UseG1GC 14300
-XX:+UseG1GCD:\Project>jmap -heap 14300 | findstr "GC"
Garbage-First (G1) GC with 10 thread(s)

查看GC收集器详情:

D:\Project>jcmd 14300 GC.run
14300:
Command executed successfully91.976: [Full GC (System.gc())  65M->31M(512M), 0.1022988 secs][Eden: 23.0M(284.0M)->0.0B(307.0M) Survivors: 23.0M->0.0B Heap: 65.8M(512.0M)->31.6M(512.0M)], [Metaspace: 57227K->57206K(1101824K)][Times: user=0.11 sys=0.00, real=0.11 secs] 
  • Eden:新生代收集情况。

  • Survivors:幸存区收集情况。

  • Heap:整个堆空间收集情况。





三、垃圾收集器特有参数

1. ParNew

-XX:ParallelGCThreads=

设置垃圾收集时的线程数量,默认值根据平台而变。



2. Parallel Scavenge

-XX:MaxGCPauseMillis=

控制最大垃圾收集停顿时间,收集器将尽力保证内存回收花费的时间不超过用户设定值。

将MaxGCPauseMillis设置更小,并不一定能使系统的垃圾收集速度变得更快,垃圾收集停顿时间缩短是以牺牲吞吐量和新生代空间为代价换取的:系统把新生代调得小一些,收集300MB新生代肯定比收集500MB快,但这也直接导致垃圾收集发生得更频繁。停顿时间的确在下降,但吞吐量也降下来了。


-XX:GCTimeRatio=

设置吞吐量大小,范围(0 < n <100)。也就是垃圾收集时间占总时间的比率,相当于吞吐量的倒数。譬如把此参数设置为19,那允许的最大垃圾收集时间就占总时间的5%(即1/(1+19)),默认值为99,即允许最大1%(即1/(1+99))的垃圾收集时间。


-XX:+/-UseAdaptiveSizePolicy

这是一个开关参数,当这个参数被激活之后,就不需要人工指定新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象大小(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量。这种调节方式称为垃圾收集的自适应的调节策略(GC Ergonomics)





四、内存设置

-Xmx | -XX:MaxHeapSize=

设置堆的最大值。值需要为1024的倍数且大于2M。默认值的设置基于系统配置,在64位JVM上,默认的最大堆大小为物理内存的1/4,默认值最大可达1G。


-Xms | -XX:InitialHeapSize=

设置堆的最小值。值需要为1024的倍数且大于1M。默认值为分配给newSize和oldSize的和(默认值为物理内存的1/64),默认值最大可达1G。


-Xmn | -XX:NewSize= | -XX:MaxNewSize=

  • -Xmn同时设置新生代的初始值和最大值。
  • -XX:NewSize设置新生代初始值。
  • -XX:MaxNewSize设置新生代最大值。

值设置过小时,会导致频繁的mirrorGC发生。值设置过大,会导致每次执行GC时间变得很长。Oracle官方建议新生代大小设置为整个堆大小的1/2或1/4。


-Xss | -XX:ThreadStackSize=

设置该参数以设置栈容量,值越大,能容纳的栈深越深。

默认值取决于平台:

  • Linux/ARM (32-bit): 320 KB
  • Linux/i386 (32-bit): 320 KB
  • Linux/x64 (64-bit): 1024 KB
  • macOS (64-bit): 1024 KB
  • Oracle Solaris/i386 (32-bit): 320 KB
  • Oracle Solaris/x64 (64-bit): 1024 KB
  • Windows: 默认值取决于物理内存大小

-XX:MetaspaceSize= | -XX:MaxMetaspaceSize= ——-XX:PermSize= | -XX:MaxPermSize=

metaspace用于元空间,perm永久代。jdk8前,perm参数用于限制永久代的大小,jdk8之后,永久代被元空间提代,metaspace参数用于限制元空间大小。

  • -XX:PermSize | -XX:MaxPermSize:分别设置永久代的初始大小和最大大小。
  • -XX:MetaspaceSize | -XX:MaxMetaspaceSize:分别设置元空间的初始大小和最大大小。
  • 永久代与元空间一样,当metadata使用超过当前空间大小时,均会产生一次gc,其默认值都取决于系统平台。




五、内存分配策略

-XX:FieldsAllocationStyle=

该参数已在JDK14被遗弃。可以参考Deprecate -XX:FieldsAllocationStyle product option

对象内存结构中的实例数据的存储顺序,会受到虚拟机分配策略参数(-XX:FieldsAllocationStyle参数)和字段在Java源码中定义顺序的影响。
相同宽度的字段总是被分配到一起存放,在满足这个前提条件的情况下,在父类中定义的变量会出现在子类之前。该参数有三个选项:
0:oops、longs/doubles、ints、shorts/chars、bytes/booleans
1:HotSpot虚拟机的默认分配顺序,longs/doubles、ints、shorts/chars、bytes/booleans、oops
2:将父类和子类的oops放在一起


-XX:+/-CompactFields

启用或关闭的效果并不明显,该参数已在JDK14被遗弃。可以参考Deprecate product flag -XX:CompactFields

默认启用,启用时,将允许子类之中较窄的变量插入父类变量的空隙之中,以节省出一点点空间。


-XX:+/-UseTLAB

在为对象分配内存时,线程会在可用内存区域为这个对象分配一块内存。这时会产生一个问题,那就是对象创建是一个很频繁的操作,在并发情况下,那么内存的分配就变得不是那么安全了,默认情况下,虚拟机会采用CAS的方式保证并发操作的安全性。UseTLAB实际上提供了另一种方案,即为每一个线程单独分配一块内存,每个线程使用该内存来分配对象,当该内存使用完后,才会使用CAS来为线程分配一块新的私有内存。

默认启用,启用时将为每个线程在Java堆的新生代中预先分配一小块内存,这一块内存称为本地线程分配缓冲(thread-local allocation blocks,TLABs)使用该内存可以保证并发分配内存时的安全性和并发性。


-XX:MinHeapFreeRatio= | -XX:MaxHeapFreeRatio=

这里可以参考:4 Factors Affecting Garbage Collection Performance

  • -XX:MinHeapFreeRatio:设置堆在GC后的最小空闲百分比,默认40。GC后,如果堆的空闲空间百分比低于40%,那么将扩展以保持40%的空闲空间,直到允许的最大堆大小。
  • -XX:MaxHeapFreeRatio:设置堆在GC后的最大空闲百分比,默认70。GC后,如果空闲空间超过70%,那么根据堆的最小大小,生成的代将收缩,以便只有70%的空间是空闲的。
  • 这两者的作用就是将空闲空间限制在一定范围内,保证下限避免创建对象时频繁的进行堆空间扩容,保证上限避免大量空间被无效占用。
  • 两者计算百分比的空间是根据-Xms和-Xmx参数来计算的,即:堆空闲空间 / 当前堆的总空间;其中 当前堆的总空间(由于GC后会扩容或者收缩,导致这个空间总是变动的;当然-Xms和-Xmx值相同时,这个总空间则不变) 其下限为-Xms的值,上限为-Xmx的值。





六、内存分析

这部分参数,除非特殊说明都是默认关闭的。它们都可以在运行时启动,使用前文提到的命令行工具:jinfo -flag

-XX:+/-HeapDumpOnOutOfMemoryError

虚拟机出现内存溢出异常时,自动Dump出当前的内存堆转储快照,用于事后分析。一般用于分析事故机,正常的生产环境中打开此项容易造成系统处理业务变慢。


-XX:+/-TraceClassLoading

查看类型加载信息,启用该配置,就可以在打印的日志中看到哪些类被JVM加载。

[Loaded java.lang.Object from C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar]
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar]
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar]
[Loaded java.lang.String from C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar]

-XX:+/-TraceClassUnloading

查看类型卸载信息,在类型被JVM卸载时,打印被卸载的信息。


-Xloggc:filename & -XX:+/-PrintGC等GC日志打印相关参数

-Xloggc:filename:通过-Xloggc指定具体文件来收集所有的gc日志,这个参数与**-verbose:gc**的输出日志类似,同时使用时,-Xloggc将会覆盖-verbose:gc。

此外,如果需要更多GC日志,可以通过具体的GC日志参数来控制。

-Xloggc日志内容如下:

Java HotSpot(TM) 64-Bit Server VM (25.171-b11) for windows-amd64 JRE (1.8.0_171-b11), built on Mar 28 2018 16:06:12 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 16119108k(7787392k free), swap 34862400k(22884524k free)
CommandLine flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:InitialHeapSize=52428800 -XX:+ManagementServer -XX:MaxHeapSize=52428800 -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
0.408: [GC (Allocation Failure)  12800K->1872K(49152K), 0.0016370 secs]
0.540: [GC (Allocation Failure)  14672K->3393K(49152K), 0.0024662 secs]
0.676: [GC (Allocation Failure)  16193K->5145K(49152K), 0.0028768 secs]

可以看到启用-Xloggc后,它默认打开了-XX:+PrintGC -XX:+PrintGCTimeStamps这两个选择。事实上-Xloggc只有记录gc日志到文件的能力,具体要记录什么都是通过这些GC日志参数而定的。


GC日志参数(以下参数都默认关闭):

  • -XX:+PrintGC:打印GC摘要数据。
  • -XX:+PrintGCApplicationConcurrentTime:允许打印自上次暂停(例如,GC暂停)以来经过了多长时间。
  • -XX:+PrintGCApplicationStoppedTime:允许打印暂停(例如,GC暂停)持续了多长时间。
  • -XX:+PrintGCDateStamps:允许在每次GC时打印日期时间戳。
  • -XX:+PrintGCDetails:允许在每次GC时打印详细消息。
  • -XX:+PrintGCTaskTimeStamps:允许为每个GC工作线程任务打印时间戳。
  • -XX:+PrintGCTimeStamps:记录打印日志的时间,该时间为虚拟机启动到目前为止的总时长。





参考

深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明
java
java 8 doc
javase doc
Java HotSpot VM
memorymanagement
Java Virtual Machine Technology
Java HotSpot Equivalents of Exact VM Flags
Java Platform, Standard Edition Documentation
4 Factors Affecting Garbage Collection Performance
Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide

相关文章:

【JVM基础内容速查表】JVM基础知识 默认参数 GC命令 工具使用 JVM参数设置、说明、使用方法、注意事项等(持续更新)

目录一、JVM前置知识1. -X、-XX含义2. JVM参数值的类型和设置方式3. 查看GC时用到的命令和JVM参数4. 查看JVM默认参数二、垃圾收集器选择-XX:UseSerialGC-XX:UseParallelGC-XX:UseParallelOldGC-XX:UseParNewGC-XX:UseConcMarkSweepGC-XX:UseG1GC三、垃圾收集器特有参数1. ParN…...

C语言经典编程题100例(61~80)

目录61、练习7-7 矩阵运算62、练习7-8 方阵循环右移63、习题6-1 分类统计字符个数64、习题6-2 使用函数求特殊a串数列和65、习题6-4 使用函数输出指定范围内的Fibonacci数66、习题6-5 使用函数验证哥德巴赫猜想67、习题6-6 使用函数输出一个整数的逆序数68、练习8-2 计算两数的…...

toxssin:一款功能强大的XSS漏洞扫描利用和Payload生成工具

关于toxssin toxssin是一款功能强大的XSS漏洞扫描利用和Payload生成工具&#xff0c;这款渗透测试工具能够帮助广大研究人员自动扫描、检测和利用跨站脚本XSS漏洞。该工具由一台HTTPS服务器组成&#xff0c;这台服务器将充当一个解释器&#xff0c;用于处理恶意JavaScript Pay…...

Keepalived与HaProxy的协调合作原理分析

Keepalived与HaProxy的协调合作原理分析keepalived与haproxy合作场景更好的理解方式协调合作中考虑的问题一、Keepalived以TCP/IP模型角度来分析&#xff1a;二、HaProxy总结&#xff1a;协调合作中考虑的问题的答案虚拟ip&#xff1a;虚拟IP技术&#xff0c;就是一个未分配给客…...

抖音如何找到博主视频推广?筛选博主要看那些数据

近年来抖音视频推广越来越成为企业宣传的热门选择&#xff0c;今天就来和大家聊聊抖音如何找到博主视频推广&#xff0c;以及几种主流的对接方式。一、什么是抖音博主视频推广?抖音博主视频推广就是通过博主的影响力和粉丝量&#xff0c;吸引用户到短视频平台进行观看相关合作…...

Win11的两个实用技巧系列之如何关闭登录密码?

Win11如何关闭登录密码?Win11关闭登录密码的两种解决方法win11是电脑更新后的全新系统&#xff0c;每次开启需要输入密码。有的用户嫌麻烦想要关闭&#xff0c;下面小编就为大家带来了关闭的方法&#xff0c;一起来看看吧有不少用户在升级或者第一次使用Win11系统的时候&#…...

润普挂卷失败之老卷宗对接NP无法获取案件信息问题排查

润普挂卷失败之老卷宗对接NP无法获取案件信息问题排查 写在最前面 根因&#xff1a;NP的dzjzzzfw与老卷宗dzjz服务用的zookeeper不是同一个&#xff0c;且老卷宗指向的zookeeper没有任何一个匹配的dzjzzzfw。仅有消费者&#xff0c;没有任何生产者&#xff0c;导致老卷宗通过…...

产品经理面试题思考及回答思路(一)

求职产品助理/经理岗位&#xff0c;转行产品岗面试真题 关于产品经理岗位能力的思考&#xff1a; 什么是产品经理&#xff1f;为什么要当/选择做产品经理&#xff1f;怎么理解产品经理&#xff1f;如何理解产品经理的价值&#xff1f;产品日常工作有哪些&#xff1f;工作流程…...

Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model

Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model 2019 Design, Automation & Test in Europe Conference & Exhibition (DATE) DOI: 10.23919/DATE.2019.8715126 目录Abstract一、Introduction二、PROBLEM FORMULATION AND PRELIMINARIE…...

论一个上班族如何一次性通过PMP考试

PMP是我工作后考取的一个证书。从准备到通过&#xff0c;花了大约三个月的时间。我之前在某家互联网公司从事程序员的工作&#xff0c;工作一段时间后&#xff0c;天天敲着代码&#xff0c;改着bug&#xff0c;感觉比较迷茫&#xff0c;不知道未来的发展在哪里&#xff0c;都说…...

Web前端:使用Angular CLI时的最佳实践和专业技巧

在web开发业务中&#xff0c;构建高性能的应用程序是首要因素。此外&#xff0c;用开发人员最流行的语言开发一个健壮的网站将始终为构建高功能的网站提供适当的基础网站。相比之下&#xff0c;不可否认&#xff0c;Angular CLI是建立得最好且正在成长的框架之一。Angular CLI简…...

从0到1一步一步玩转openEuler--15 openEuler使用DNF管理软件包

文章目录15.1 搜索软件包15.2 列出软件包清单15.3 显示RPM包信息15.4 安装RPM包15.5 下载软件包15.6 删除软件包DNF是一款Linux软件包管理工具&#xff0c;用于管理RPM软件包。DNF可以查询软件包信息&#xff0c;从指定软件库获取软件包&#xff0c;自动处理依赖关系以安装或卸…...

【java】Spring Boot --spring boot项目整合xxl-job

文章目录1、源码下载地址2.文档地址3.源码结构4.初始化数据库脚本5.配置调度中心xxl-job-admin5.1 修改调度中心配置文件&#xff1a;/xxl-job/xxl-job-admin/src/main/resources/application.properties5.2 启动调度中心5.3 访问调度中心管理界面6.创建执行器项目6.3 载入配置…...

视图、索引、存储过程、触发器

视图、索引、存储过程、触发器 group by补充&#xff1a; 规范来说&#xff0c;分组查询中&#xff0c;select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化&#xff0c;分组后如果某个字段的所有记录相同&#xff0c;同样可以select。 视图 视图是虚拟…...

ImportError: cannot import name ‘FlattenObservation‘ from ‘gym.wrappers‘ 解决方案

问题描述 今天在运行openai给出的ppo2的baseline的时候遇到了以下bug&#xff1a; File "/root/code/baselines_openai/baselines/common/cmd_util.py", line 12, in <module> from gym.wrappers import FlattenObservation, FilterObservation ImportErr…...

大件传输的9种方法

不知道你有没有试过用电子邮件进行大文件传输&#xff0c;由于文件大小的限制&#xff0c;往往会发送失败。同时&#xff0c;一些文件共享服务对传输的文件有大小限制&#xff0c;使得你无法与朋友分享电影片段或向客户展示你的工作样本。还有一些要求你注册一个账户&#xff0…...

将vue2的项目《后台管理模式》转变为vue3版本 (一)

本篇主要讲了将v2项目转变为v3版本&#xff0c;以本人经验愿于各位分享 希望大家可以一起交流&#xff01;&#xff01;&#xff01;&#xff01; 文章目录一、app 出口位置二 、 index.js 路由配置三、package.json 文件四、 main.js 既然安装插件那就需要引入五、 跨域问题总…...

苹果手机怎么下载手机铃声?图文教程,快速学会

很多小伙伴喜欢使用苹果手机&#xff0c;可是苹果手机里的铃声自己并不是很喜欢听&#xff0c;想要下载一些好听的歌曲更换自己的手机铃声。苹果手机怎么下载手机铃声&#xff1f;别着急&#xff0c;今天小编以图文的方式&#xff0c;教教大家如何使用苹果手机下载手机铃声。 苹…...

AJAX笔记(二)Fetch和axios

1、Fetch 1.1、XMLHttpRequest的缺陷 1.2、fetch的get写法 1.3、fetch的post写法 1.4、fetch的put写法 1.5、fetch的patch写法 1.6、fetch的delete写法 2、axios 2.1、axios的介绍 2.2、axios的get写法 2.3、axios的post写法&#xff08;图一json写法和图二三form写法&#x…...

TOTOLINK NR1800X 系列 CVE 分析

漏洞简介 TOTOLINK NR1800X最近报了一些cve&#xff0c;现主要对其命令注入进行具体分析&#xff0c;以及对其登录绕过进行分析。 固件下载地址&#xff1a;https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html 环境搭建 固件提取 binwa…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...