常用Java虚拟机参数

打印GC日志

-XX:+PrintGC

jdk9之后建议使用 -Xlog:gc

[GC (Allocation Failure)  4676K->2628K(9728K), 0.0004307 secs]
[GC (Allocation Failure)  4676K->2628K(9728K), 0.0004717 secs]
[GC (Allocation Failure)  4676K->2628K(9728K), 0.0006033 secs]
[GC (Allocation Failure)  4676K->2628K(9728K), 0.0005774 secs]

堆空间使用量约为4MB,在GC后,堆空间使用量为2628KB,当前可用的堆空间总和约为10MB

-XX:+PrintGCDetails

jdk9之后使用 -Xlog:gc*

GC详细信息

[GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4200K->2152K(9728K), 0.0008739 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4200K->2152K(9728K), 0.0004044 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
 PSYoungGen      total 2560K, used 935K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
  eden space 2048K, 45% used [0x00000000ffd00000,0x00000000ffde9d38,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
  to   space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
 ParOldGen       total 7168K, used 2152K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
  object space 7168K, 30% used [0x00000000ff600000,0x00000000ff81a060,0x00000000ffd00000)
 Metaspace       used 3988K, capacity 4572K, committed 4864K, reserved 1056768K
  class space    used 435K, capacity 460K, committed 512K, reserved 1048576K

最后一次GC是新生代GC,新生代从回收前的2047KB降到0K,整个堆从4200KB降到2152KB

堆信息:新生代总大小2560K,已使用935K,其后的3个16进制表示新生代的下界、当前上界和上界

[0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)

使用上界减去下界就能得到当前堆空间的最大值,使用当前上界减去下界,就是当前虚拟机已经为程序分配的空间。如果当前上界等于下界,说明当前的堆空间已经没有扩大可能性。

(0x0000000100000000-0x00000000ffd00000)/1024=3072K

这块空间正好是eden+from+to的总和

-XX:+PrintHeapAtGC

jdk9之后删除词参数

在每次GC前、后分别打印堆的信息

{Heap before GC invocations=1156 (full 0):
 PSYoungGen      total 2560K, used 2047K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
  eden space 2048K, 99% used [0x00000000ffd00000,0x00000000ffeffff8,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
  to   space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
 ParOldGen       total 7168K, used 2608K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
  object space 7168K, 36% used [0x00000000ff600000,0x00000000ff88c038,0x00000000ffd00000)
 Metaspace       used 3979K, capacity 4572K, committed 4864K, reserved 1056768K
  class space    used 434K, capacity 460K, committed 512K, reserved 1048576K
Heap after GC invocations=1156 (full 0):
 PSYoungGen      total 2560K, used 0K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
  eden space 2048K, 0% used [0x00000000ffd00000,0x00000000ffd00000,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
  to   space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
 ParOldGen       total 7168K, used 2608K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
  object space 7168K, 36% used [0x00000000ff600000,0x00000000ff88c038,0x00000000ffd00000)
 Metaspace       used 3979K, capacity 4572K, committed 4864K, reserved 1056768K
  class space    used 434K, capacity 460K, committed 512K, reserved 1048576K
}
-XX:+PrintGCTimeStamps

打印GC发生的时间,jdk9之后使用-Xlog:gc*默认打印时间

1.751: [GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4512K->2464K(9728K), 0.0003170 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.752: [GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4512K->2464K(9728K), 0.0003336 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.753: [GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4512K->2464K(9728K), 0.0002719 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.755: [GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4512K->2464K(9728K), 0.0003494 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.756: [GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4512K->2464K(9728K), 0.0002822 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.757: [GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4512K->2464K(9728K), 0.0003964 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
-XX:+PrintGCApplicationConcurrentTime

打印应用程序的执行命令

1.786: [GC (Allocation Failure) [PSYoungGen: 2047K->0K(2560K)] 4668K->2620K(9728K), 0.0003586 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.788: Application time: 0.0008788 seconds
-XX:+PrintGCApplicationStoppedTime

打印应用程序由于GC而产生的停顿时间

0.177: [GC (Allocation Failure) [PSYoungGen: 2029K->503K(2560K)] 2029K->950K(9728K), 0.0008365 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.178: Total time for which application threads were stopped: 0.0009772 seconds, Stopping threads took: 0.0000150 seconds
-XX:+PrintReferenceGC

打印软引用、弱引用、虚引用和Finallize队列信息 jdk9之后删除此参数

1.850: [GC (Allocation Failure) 1.851: [SoftReference, 0 refs, 0.0000321 secs]1.851: [WeakReference, 0 refs, 0.0000108 secs]1.851: [FinalReference, 0 refs, 0.0000257 secs]1.851: [PhantomReference, 0 refs, 0 refs, 0.0000116 secs]1.851: [JNI Weak Reference, 0.0000073 secs][PSYoungGen: 2047K->0K(2560K)] 4624K->2576K(9728K), 0.0008096 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

类加载/卸载的跟踪

-verbose:class -XX:+TraceClassLoading -XX:+TraceClassUnloading

在jdk9之后使用-Xlog:class+load=info -Xlog:class+unload=info

追踪加载/卸载以class文件的形式加载到虚拟机的类,还有动态代理、AOP等产生的动态类

查看系统参数

-XX:+PrintVMOptions

打印虚拟机接收到的命令行显式参数

VM option '+PrintVMOptions'
-XX:+PrintCommandLineFlags

打印传递给虚拟机的显式和隐式参数

-XX:InitialHeapSize=266121280 -XX:MaxHeapSize=4257940480 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
5
-XX:+PrintFlagsFinal

打印所有的系统参数的值

-Xms -Xmx

-Xms初始堆空间的大小,如果初始堆的空间不足耗尽,虚拟机将会对堆空间进行扩展,其扩展上限为最大堆空间,最大堆空间可以使用参数-Xmx指定,一般情况下在HotSpot中初始堆的大小和最大堆大小设置成一致。

-Xms20M -Xmx20M
-XX:SurvivorRatio

设置新生代eden区和from/to区的比例

-Xms20m -Xmx20m -Xmn6m -XX:SuvivorRatio=2 -XX:+PrintGCDetails
Heap
 PSYoungGen      total 4608K, used 3667K [0x00000000ffa00000, 0x0000000100000000, 0x0000000100000000)
  eden space 3072K, 70% used [0x00000000ffa00000,0x00000000ffc1ce80,0x00000000ffd00000)
  from space 1536K, 97% used [0x00000000ffd00000,0x00000000ffe78010,0x00000000ffe80000)
  to   space 1536K, 0% used [0x00000000ffe80000,0x00000000ffe80000,0x0000000100000000)
 ParOldGen       total 14336K, used 572K [0x00000000fec00000, 0x00000000ffa00000, 0x00000000ffa00000)
  object space 14336K, 3% used [0x00000000fec00000,0x00000000fec8f060,0x00000000ffa00000)
 Metaspace       used 3417K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 372K, capacity 388K, committed 512K, reserved 1048576K
-Xmn

-Xmn设置新生代的绝对大小

-XX:NewRatio

设置新生代和老年代的比例

-XX:+HeapDumpOnOutOfMemoryError

在内存溢出时导出整个堆的 信息

-XX:HeapDumpPath

指定导出堆的存放路径,和-XX:+HeapDumpOnOutOfMemoryError一起使用

-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

方法区

-XX:PermSize -XX:MaxPermSize

jdk1.6 .17等版本 -XX:PermSize表示永久区大小 -XX:MaxPermSize表示最大永久区大小

-XX:MaxMetaspaceSize

jdk1.8及以后 指定元数据区的最大可用值

-Xss

指定线程的栈大小

-XX:+DoEscapeAnalysis

启用逃逸分析

-XX:+EliminateAllocations

开启标量替换

直接内存

-XX:MaxDirectMemorySize

最大可用直接内存 如果不设置,默认值为最大堆空间即-Xmx值,当直接内存使用量达到-XX:MaxDirectMemorySize时,就会触发GC,如果GC不能有效释放空间,直接内存溢出依然会引起系统的OOM。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Java虚拟机精讲》是一本介绍Java虚拟机的权威性书籍。该书的作者是豆瓣高分图书《深入理解Java虚拟机:JVM高级特性与最佳实践》的作者陈晓明。 该书共分为12章,全面解析了Java虚拟机的原理、结构、内存管理、垃圾收集、安全性等方面的内容。 首先,该书通过介绍Java虚拟机的历史背景和发展,引出了Java虚拟机Java程序运行中的重要性以及其作用。 接着,该书详细介绍了Java虚拟机的架构,包括Java虚拟机的运行时数据区域、执行引擎、类加载机制等。 然后,该书详细解析了Java虚拟机的内存管理,包括Java堆、方法区、运行时常量池等各个内存区域的作用、实现原理以及优化技巧。 此外,该书还对Java虚拟机的垃圾收集机制进行深入介绍,包括垃圾收集算法、垃圾收集器的分类和选择原则,并提供了相应的性能调优方法。 另外,该书还涵盖了Java虚拟机的安全性问题,包括如何保证Java程序的安全、如何进行代码审计等内容。 最后,该书还介绍了Java虚拟机的性能调优方法,包括如何进行性能诊断、性能优化等方面的内容。 总之,《Java虚拟机精讲》是一本全面而深入介绍Java虚拟机的书籍,对于想要深入了解Java虚拟机原理、优化Java程序性能的开发者和爱好者来说,是一本不可多得的好书。通过阅读该书,读者可以全面掌握Java虚拟机的工作原理,为编写高性能、稳定的Java程序提供指导。 ### 回答2: 《Java虚拟机精讲》是一本详细讲解Java虚拟机(JVM)原理和内部实现的电子书。这本书系统地介绍了JVM的结构、执行引擎、垃圾回收器、类加载机制等关键组件。 首先,本书对JVM的结构进行了详细讲解。它将JVM分为类加载子系统、执行引擎、内存管理和垃圾回收子系统等几个模块,每个模块都被详细讲解了其内部的工作原理和实现细节。读者可以通过对JVM结构的了解,深入理解JVM的内部运作方式。 其次,本书对JVM的执行引擎进行了深入解析。它介绍了JVM的运行时数据区域、栈帧的结构和数据传递方式等关键概念,帮助读者理解Java字节码的执行过程。 此外,垃圾回收是JVM的重要特性之一,而本书也对JVM的垃圾回收器进行了详细的介绍。它解释了不同类型的垃圾回收器(如Serial、Parallel、CMS、G1等)的原理和适用场景,并且通过一些实例帮助读者理解垃圾回收器的工作过程。 最后,本书还对类加载机制进行了解析。它包括类加载的过程、双亲委派模型、类的初始化和链接等内容,帮助读者深入理解Java类的加载和运行机制。 总之,《Java虚拟机精讲》是一本深入讲解JVM原理和内部实现的电子书。通过阅读本书,读者可以更全面地了解JVM的结构、执行引擎、垃圾回收机制和类加载机制等关键组成部分,为深入理解Java编程和性能优化提供了基础。 ### 回答3: 《Java虚拟机精讲PDF》是一本系统而全面地介绍Java虚拟机的教材。Java虚拟机(JVM)是Java程序在执行过程中所依赖的运行环境,它可以解释和执行Java字节码。此书围绕着JVM的运行机制、内存管理、垃圾回收等方面展开详细的介绍。 首先,该书详细讲解了JVM的执行过程和各个组件的作用。它深入探讨了类加载器、字节码解释器、即时编译器等核心组件,并结合实例进行解释。读者能够学习到JVM执行Java代码的具体流程,了解JVM是如何加载并执行Java类的。 其次,该书重点介绍了JVM的内存管理机制。它详细解释了Java内存模型、堆、栈、方法区等内存结构,以及垃圾回收机制。读者可以了解到Java虚拟机是如何管理和分配内存的,以及如何通过垃圾回收来优化内存的使用。 此外,该书还涵盖了性能调优、多线程并发等高级主题。它介绍了如何通过设置JVM参数来优化应用程序的性能,并提供了一些常见的性能调优技巧。同时,它也介绍了Java多线程编程的基本原理和常用的线程安全机制。 总的来说,《Java虚拟机精讲PDF》是一本对于深入了解和研究Java虚拟机非常有帮助的教材。通过阅读本书,读者可以系统全面地掌握Java虚拟机的原理和实现机制,从而更加高效地进行Java程序的开发和调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值