【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生成工具,这款渗透测试工具能够帮助广大研究人员自动扫描、检测和利用跨站脚本XSS漏洞。该工具由一台HTTPS服务器组成,这台服务器将充当一个解释器,用于处理恶意JavaScript Pay…...
Keepalived与HaProxy的协调合作原理分析
Keepalived与HaProxy的协调合作原理分析keepalived与haproxy合作场景更好的理解方式协调合作中考虑的问题一、Keepalived以TCP/IP模型角度来分析:二、HaProxy总结:协调合作中考虑的问题的答案虚拟ip:虚拟IP技术,就是一个未分配给客…...
抖音如何找到博主视频推广?筛选博主要看那些数据
近年来抖音视频推广越来越成为企业宣传的热门选择,今天就来和大家聊聊抖音如何找到博主视频推广,以及几种主流的对接方式。一、什么是抖音博主视频推广?抖音博主视频推广就是通过博主的影响力和粉丝量,吸引用户到短视频平台进行观看相关合作…...
Win11的两个实用技巧系列之如何关闭登录密码?
Win11如何关闭登录密码?Win11关闭登录密码的两种解决方法win11是电脑更新后的全新系统,每次开启需要输入密码。有的用户嫌麻烦想要关闭,下面小编就为大家带来了关闭的方法,一起来看看吧有不少用户在升级或者第一次使用Win11系统的时候&#…...
润普挂卷失败之老卷宗对接NP无法获取案件信息问题排查
润普挂卷失败之老卷宗对接NP无法获取案件信息问题排查 写在最前面 根因:NP的dzjzzzfw与老卷宗dzjz服务用的zookeeper不是同一个,且老卷宗指向的zookeeper没有任何一个匹配的dzjzzzfw。仅有消费者,没有任何生产者,导致老卷宗通过…...
产品经理面试题思考及回答思路(一)
求职产品助理/经理岗位,转行产品岗面试真题 关于产品经理岗位能力的思考: 什么是产品经理?为什么要当/选择做产品经理?怎么理解产品经理?如何理解产品经理的价值?产品日常工作有哪些?工作流程…...
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是我工作后考取的一个证书。从准备到通过,花了大约三个月的时间。我之前在某家互联网公司从事程序员的工作,工作一段时间后,天天敲着代码,改着bug,感觉比较迷茫,不知道未来的发展在哪里,都说…...
Web前端:使用Angular CLI时的最佳实践和专业技巧
在web开发业务中,构建高性能的应用程序是首要因素。此外,用开发人员最流行的语言开发一个健壮的网站将始终为构建高功能的网站提供适当的基础网站。相比之下,不可否认,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软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸…...
【java】Spring Boot --spring boot项目整合xxl-job
文章目录1、源码下载地址2.文档地址3.源码结构4.初始化数据库脚本5.配置调度中心xxl-job-admin5.1 修改调度中心配置文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties5.2 启动调度中心5.3 访问调度中心管理界面6.创建执行器项目6.3 载入配置…...
视图、索引、存储过程、触发器
视图、索引、存储过程、触发器 group by补充: 规范来说,分组查询中,select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化,分组后如果某个字段的所有记录相同,同样可以select。 视图 视图是虚拟…...
ImportError: cannot import name ‘FlattenObservation‘ from ‘gym.wrappers‘ 解决方案
问题描述 今天在运行openai给出的ppo2的baseline的时候遇到了以下bug: File "/root/code/baselines_openai/baselines/common/cmd_util.py", line 12, in <module> from gym.wrappers import FlattenObservation, FilterObservation ImportErr…...
大件传输的9种方法
不知道你有没有试过用电子邮件进行大文件传输,由于文件大小的限制,往往会发送失败。同时,一些文件共享服务对传输的文件有大小限制,使得你无法与朋友分享电影片段或向客户展示你的工作样本。还有一些要求你注册一个账户࿰…...
将vue2的项目《后台管理模式》转变为vue3版本 (一)
本篇主要讲了将v2项目转变为v3版本,以本人经验愿于各位分享 希望大家可以一起交流!!!! 文章目录一、app 出口位置二 、 index.js 路由配置三、package.json 文件四、 main.js 既然安装插件那就需要引入五、 跨域问题总…...
苹果手机怎么下载手机铃声?图文教程,快速学会
很多小伙伴喜欢使用苹果手机,可是苹果手机里的铃声自己并不是很喜欢听,想要下载一些好听的歌曲更换自己的手机铃声。苹果手机怎么下载手机铃声?别着急,今天小编以图文的方式,教教大家如何使用苹果手机下载手机铃声。 苹…...
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写法(图一json写法和图二三form写法&#x…...
TOTOLINK NR1800X 系列 CVE 分析
漏洞简介 TOTOLINK NR1800X最近报了一些cve,现主要对其命令注入进行具体分析,以及对其登录绕过进行分析。 固件下载地址:https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html 环境搭建 固件提取 binwa…...
IDEA如何将代码进行上下左右移动,改变位置
鼠标光标定位快捷键 1.ctrl Home:定位到一页代码的行头 2.ctrl end :定位到一页代码的行末 3.home:定位到一行的行头 4.end:定位到一行的行末 有的小键盘可能没有home和end键,就需要自行修改IDEA中的快捷键或者使用键盘映射的方法修改。 将…...
【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢
HashMap中为什么引入红黑树,而不是AVL树呢1. 概述 开始学习这个知识点之前我们需要知道,在JDK1.8 以及之前,针对HashMap有什么不同。 JDK 1.7的时候,HashMap的底层实现是数组 链表JDK1.8的时候,HashMap的底层实现是数…...
深度学习Week15-common.py文件解读(YOLOv5)
目录 简介 一.基本组件 1.1autopad 1.2Conv 1.3 Focus 1.4Bottleneck 1.5BottleneckCSP 1.6 C3 1.7 SPP 1.8Concat 1.9Contract、Expand 二、重要类 2.1非极大值抑制(NMS) 2.2AutoShape 2.3 Detections 2.4 Classify 三、实验 …...
qemu的snapshot快照功能的详细使用介绍
快照功能还是蛮有趣的,就是资料比较少,这边万能菜道人特意整理了一下。参考内容:QEMU checkpoint(snapshot) 使用-pudn.comKVM&QEMU学习笔记(二)-蒲公英云 (dandelioncloud.cn)在线迁移存储 - 爱码网 (likecs.com)…...
谷歌关键词优化多少钱【2023年调研】
本文主要分享Google关键词排名优化的一些成本调研,方便大家参考。 本文由光算创作,有可能会被剽窃和修改,我们佛系对待这种行为吧。 今年2023年了,谷歌关键词优化到底要多少钱? 答案是:价格在2w~25w左右…...
凸包及其算法
概念 凸包:一个能够将所有给定点围住的最小周长封闭图形。 稳定凸包:在当前组成凸包的点集 V0V_0V0 中新增一个不在凸包上的点,形成新点集 V1V_1V1,若可以使 V1V_1V1 中所有点都在 V1V_1V1 的点的凸包上,则这…...
计算机网络学习笔记(二)物理层
物理层(传输比特0/1)基本概念 物理层下的传输媒体 1. 导引型 同轴电缆,双绞线(绞合可抵御干扰),光纤,电力线 2. 非导引型(调制振幅 频率 相位) 无线电波,微…...
为什么职称要提前准备?
职称反映专业技术人员的学术和技术水平、工作能力的工作成就,具有学衔、岗位两种性质。目前中国现状下,职称主要代表社会地位,就业经验,职称等级越高,越容易得到更高的社会经济和福利待遇。 职称通过申报、评审的形式…...
MyBatis详解1——相关配置
一、什么是MyBatis 1.定义:是一个优秀的持久层框架(ORM框架),它支持自定义 SQL、存储过程以及高级映射。MyBatis是一个用来更加简单的操作和读取数据库的工具。 2.支持的操作方式:xml或者注解实现操作(xm…...
字节青训营——秒杀系统设计学习笔记(三)
限流算法 限流顾名思义,就是对请求或并发数进行限制;通过对一个时间窗口内的请求量进行限制来保障系统的正常运行。如果我们的服务资源有限、处理能力有限,就需要对调用我们服务的上游请求进行限制,以防止自身服务由于资源耗尽而…...
好域名做网站/网络推广方案七步法
一、问题由来前一段时间本人的电脑崩溃了,系统还原之后,eclipse就用不了,也找不大原因。eclipse报错原因是jvm出现问题:JVM terminated Exit code2 C:\ProgramData\Oracle\javapath\javaw.exe等发现似乎是JVM出现错误了然后输入ja…...
做六级真题的网站/婚恋网站排名前10
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/zjx18915341085/article/details/79715075一、准备工作1、修改环境变量,能够找到qmake&am…...
做早餐的网站/直销怎么做才最快成功
1.启动cmd命令窗口,进入本机MySQL安装bin目录: 2.关闭本机的MySQL进程(可以直接在任务管理器中找到并关闭进程)也可以命令关闭: # 关闭MySQL服务D:\MySQL\bin>sc stop mysql3. 以安全模式启动MySQLD:\MySQL\bin>…...
简网 互联 专业wordpress主机/媒体公关
C语言 _ 编辑、调试工具一、GCC编译器1、GNU工具2、GCC简介3、GCC编译器的版本4、gcc所支持后缀名解释5、编译器的主要组件6、GCC的基本用法和选项7、GCC的错误类型及对策8、**GCC编译过程**条件编译二、GDB调试工具1、Gdb调试流程:2、进入代码调试模式后一、GCC编译…...
做购物网站需要什么/长沙服务好的网络营销
目录HarmonyOS实战创建4*4的卡片实现4*4博文列表博文卡片的定义博文信息的获取卡片交互跳转到博文编辑替换卡片内容其他配置HarmonyOS实战 目前,CSDN官方App并没有适配鸿蒙系统,但是我们是程序员,完全可以自己开发,何须等待CSDN呢…...
wordpress音乐页面/如何快速推广app
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 输入:nums [4,1,4,6] 输出:[1,6] 或 [6,1] 示例 2:…...