Java Hotspot VM 可选参数选项可以划分为四类:
Ø 行为选项改变了基本VM的行为。
Ø G1垃圾收集器选项(GarbageFirst (G1) Garbage Collection Options)
Ø 性能调优选项就一个个能够用来调节VM性能的旋钮
Ø 调试选项一般跟踪、打印或是输出VM信息。在跟踪程序的处理流程非常有用,尤其对于不知道程序有问题而不知道问题到底处在哪里时就特别有用。
行为选项
Option and Default Value
|
Description
|
-XX:-AllowUserSignalHandlers
|
如果应用程序安装了信号处理器,就不会申诉(仅与Solaris和Linux系统有关)。
|
-XX:AltStackSize=16384
|
交替的信号栈大小(k 字节). (仅与Solaris 有关, 在5.0版本已经移除.)
|
-XX:-DisableExplicitGC
|
使方法System.gc()调用失效,当需要时 JVM 仍然执行垃圾回收。
|
-XX:+FailOverToOldVerifier
|
当新的类型检测器失败时切换到旧的认证器(jdk6引入此项)。
|
-XX:+HandlePromotionFailure
|
最年轻代集合不需要一个对所有存在对完全提升的保证。 (在1.4.2 升级到11引进) [5.0 和早期的版本为false]
|
-XX:+MaxFDLimit
|
猛烈将文件描写的数量增加到最大。 (仅与Solaris系统有关.)
|
-XX:PreBlockSpin=10
|
快速的旋运动变量数设定-XX:+UseSpinning.在进入操作系统线程同步代码前,控制最大旋转允许的跌代数。 (在1.4.2.引入)
|
-XX:-RelaxAccessControlCheck
|
放松访问控制检查验证 (在jdk6引入)
|
-XX:+ScavengeBeforeFullGC
|
年轻代GC优先于一个完全GC。 (在jdk1.4.1.引入)
|
-XX:+UseAltSigs
|
对于VM内部信号,应用轮换信号代替SIGUSR1 和SIGUSR2 . (仅与Solaris有关.)
|
-XX:+UseBoundThreads
|
绑定用户级别线程到kernel 线程. (仅与Solaris有关.)
|
-XX:-UseConcMarkSweepGC
|
为旧代(old generation)使用并发标记的搜索集合. (在1.4.1引入)
|
-XX:+UseGCOverheadLimit
|
使用一种策略,这种策略能够限制VM在内存溢出前花费在GC上的时间比例。 (在jdk 6进入.)
|
-XX:+UseLWPSynchronization
|
使用基于LWP-代替基于线程同步。(在jdk1.4.0. 仅针对Solaris)
|
-XX:-UseParallelGC
|
使用并行垃圾收集器对垃圾进行回收。 (在jdk 1.4.1引入)
|
-XX:-UseParallelOldGC
|
所有的集合使用并行垃圾收集器。能够自动化地设置这个选项 -XX:+UseParallelGC. (在jdk 5.0 升级到 6时引入.)
|
-XX:-UseSerialGC
|
使用序列的垃圾收集器. (在jdk 5引入.)
|
-XX:-UseSpinning
|
在同步进入到操作系统线程同步代码前,能够在Java监视器中单纯的旋转。 (仅与jdk1.4.2 到 5.0 有关.)
|
-XX:+UseTLAB
|
使用本地线程对象分配 (在jdk 1.4.0引入,众所周知的, UseTLE优先于那种.)
|
-XX:+UseSplitVerifier
|
使用StackMapTable 属性来作为新类型检测器。(在jdk 5.0引入.)[5.0: false]
|
-XX:+UseThreadPriorities
|
使用本地线程优先级。
|
-XX:+UseVMInterruptibleIO
|
线程中断前或是EINTR 在OS_INTRPT中对于I/O操作的结果 (在jdk 6 引入,仅与Solaris 有关)
|
G1(Garbage First)垃圾收集选项
Option and Default Value
|
Description
|
-XX:+UseG1GC
|
使用G1 (Garbage First) 收集器
|
-XX:MaxGCPauseMillis=n
|
对于最大GC停顿时间,设置一个目标。 这是一个软目标,于此同时JVM将会做最大努力去完成它。
|
-XX:InitiatingHeapOccupancyPercent=n
|
整个堆占据的百分比去开始一个并发GC循环。他被GC使用来触发一个基于整个堆占据的并发GC循环, 不仅仅只有一个地代(G1). 0值说明是“做实时GC循环”。默认值是45 。
|
-XX:NewRatio=n
|
旧/新代大小比例。默认是2.
|
-XX:SurvivorRatio=n
|
eden/survivor 空间大小比例。默认值是8
|
-XX:MaxTenuringThreshold=n
|
永久占用临界最大值。默认值是15.
|
-XX:ParallelGCThreads=n
|
在并行的垃圾收集阶段设置使用的线程数。默认值因JVM运行的平台的不同而不同。
|
-XX:ConcGCThreads=n
|
并发垃圾收集线程 将会使用默认值因JVM运行的平台的不同而不同.
|
-XX:G1ReservePercent=n
|
设置被保留作为吊顶的堆量,以减少可能的增量失败. 默认值是10.
|
-XX:G1HeapRegionSize=n
|
伴随G1 Java堆被子划分为统一的大小区域。这个参数的默认值取决于根据环境改造地基准堆得大小。最小是1M币,最大是32Mb。
|
性能优化选项
Option and Default Value
|
Description
|
-XX:+AggressiveOpts
|
打开点性能的编译器优化,它预计将在即将发布为默认. (在jdk 5 升级到6引入.)
|
-XX:CompileThreshold=10000
|
在编译之前,方法数量调用/分支[-client: 1,500]
|
-XX:LargePageSizeInBytes=4m
|
设置大页面使用Java堆的大小 (在1.4.0 更新中引入) [amd64: 2m.]
|
-XX:MaxHeapFreeRatio=70
|
在GC之后最大堆释放的百分比,这样来避免萎缩。
|
-XX:MaxNewSize=size
|
新代(字节)最大值自从1.4, MaxNewSize is 计算作为NewRatio一个方法. [1.3.1 Sparc: 32m; 1.3.1 x86: 2.5m.]
|
-XX:MaxPermSize=64m
|
永久代的大小[5.0 和 新的64 bit VMs 扩展了30%的大小; 1.4 amd64: 96m; 1.3.1 -client: 32m.]
|
-XX:MinHeapFreeRatio=40
|
GC之后,自由的堆得最小百分来避免扩展。
|
-XX:NewRatio=2
|
新/老代的比例[Sparc -client: 8; x86 -server: 8; x86 -client: 12.]-client: 4 (1.3) 8 (1.3.1+), x86: 12]
|
-XX:NewSize=2m
|
新代的默认大小 (字节) [5.0 和新的64 bit VMs 扩展了30% larger; x86: 1m; x86, 5.0 and older: 640k]
|
-XX:ReservedCodeCacheSize=32m
|
预留的缓存代码大小 (字节) – 最大代码缓冲大小. [Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier, Solaris 64-bit and amd64: 1024m.]
|
-XX:SurvivorRatio=8
|
活跃区/幸免区(eden/survivor)的空间大小比例[Solaris amd64: 6; Sparc in 1.3.1: 25; other Solaris platforms in 5.0 and earlier: 32]
|
-XX:TargetSurvivorRatio=50
|
在清理完后幸存空间的百分率。.
|
-XX:ThreadStackSize=512
|
线程栈的大小(字节). (0 意味着使用默认的栈大小[Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]
|
-XX:+UseBiasedLocking
|
能使用带有偏见的锁,更多的细节,查看优化例子 ( 5.0 更新到 6引入.) [5.0: false]
|
-XX:+UseFastAccessorMethods
|
使用优化了Get Get<Primitive>Field版本.
|
-XX:-UseISM
|
使用内部的共享内存. [仅对Solaris 平台] 更多的细节,查阅内部的共享内存.
|
-XX:+UseLargePages
|
使用大的内存页 (5.0 更行引入.),更多的细节,请查阅Java对大内存页支持。
|
-XX:+UseMPSS
|
使用多个页大小来支持对于栈w/4mb页. 不用伴随使用ISM,由于这取代了对于ISM的需要。 (1.4.0 更新引进,进对Solaris 9+支持.) [1.4.1 and earlier: false]
|
-XX:+UseStringCache
|
能够缓存一般分配的字符串。
|
-XX:AllocatePrefetchLines=1
|
最后一个对象分配使用在JIT编译代码产生的预取指令后,加载缓存线数默认的值是1. 最后分配的对象是一个实例以及如果它是一个数组便是值3.
|
-XX:AllocatePrefetchStyle=1
|
产生预取指令的代码样式.
0 – 没有预取指令产生,
1 – 在每个分配后,执行预取指令,
2 – 当预取指令执行了,使用TLAB 分配水印指针到闸门。
|
-XX:+UseCompressedStrings
|
使用字节数组能够以纯ASCII码来描述字符串。(JDK 6 更新版本21 性能发布时引入)
|
-XX:+OptimizeStringConcat
|
那儿有可能实现优化了字符串的拼接操作。(JDK 6升级到20时引入)
|
调试选项
略...
JVM 工作流概述图
分享到:
相关推荐
### Java SE 6与HotSpot VM故障排除指南关键知识点解析 #### 一、概述 《Java SE 6与HotSpot VM故障排除指南》是Oracle公司于2008年11月发布的一份技术文档,旨在帮助开发人员、系统管理员和技术支持人员解决在...
《Java HotSpot 虚拟机》文件中包含了关于Java虚拟机(JVM)的深入讨论,尤其是在HotSpot虚拟机上的即时编译(JIT)技术,以及Java语言的最新发展。文件内容侧重于以下几个核心知识点: 1. **Java HotSpot虚拟机的...
本文将深入探讨Java HotSpot虚拟机的部分参数及其作用,帮助开发者更好地理解和调整JVM的配置,以优化应用程序性能。 一、JVM启动参数类型 Java HotSpot虚拟机的参数可以分为三类: 1. 标准选项(-X):由Sun ...
【Java HotSpot VM Serial GC详解】 HotSpot VM的Serial GC是一种单线程的垃圾收集器,主要用于新生代的垃圾回收,特别适用于轻量级和低内存的环境。在这个话题中,我们将深入探讨Serial GC在新生代(Young ...
HotSpot VM是Oracle JDK中默认的JVM实现,它提供了一种称为HSDB(HotSpot Debugger Bridge)的工具,用于在运行时查看和分析JVM内部的数据。本篇将通过HSDB的使用案例来探讨HotSpot VM的运行时数据。 首先,我们...
Compilation in the HotSpot VM 是一篇关于 Java 虚拟机(Java Virtual Machine,JVM)的技术文档, 由 Oracle 公司的 HotSpot 编译器团队的 Zoltán Majó 撰写。该文档详细介绍了 HotSpot JVM 中的编译过程,包括...
本文档提供了Java HotSpot虚拟机(JVM)中内存管理的广泛概述,特别是在Sun公司的Java 2平台标准版(J2SE)5.0版本的发布中。文档描述了可供使用的垃圾收集器(Garbage Collectors),给出了关于如何选择和配置收集...
The authors, who are all leading Java performance and Java HotSpot VM experts, help you improve performance by using modern software engineering practices, avoiding common mistakes, and applying tips ...
《Memory Management in the Java HotSpot™ Virtual Machine》一文深入探讨了Java HotSpot虚拟机中的内存管理机制,这是Java性能优化的关键领域。HotSpot虚拟机是Oracle JDK和JRE的一部分,以其高性能和优化能力而...
在启动jdb时,通过`-XX:+UseSerialGC`选项启用串行垃圾收集器,并使用`-Xmx10m`限制Java堆大小为10MB,这样可以更好地控制和理解内存行为。通过`stop in`命令在`Test.fn`方法入口处设置断点,然后使用`run`命令启动...
Hotspot VM提供了丰富的性能监控和调试工具,如JConsole、VisualVM、JFR(Java Flight Recorder)、JITWatch等,它们可以帮助开发者深入了解JVM的运行状态,定位性能瓶颈,进行问题排查。 总结来说,Hotspot JVM...
学习JDK 源码必备,提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初...
### Java HotSpot 性能引擎架构相关知识点 #### 一、引言与概览 **Java HotSpot 虚拟机**是 Sun 公司针对 Java 平台设计的一款高性能虚拟机,它作为 Java SE 平台的核心组件,为商业关键型应用提供了强大的支持。...
HotSpot虚拟机的技术细节并没有在摘录的内容中详细说明,但根据Java SE的官方文档和HotSpot的广泛知识,HotSpot虚拟机通过以下几个方面提高Java程序的性能: 1. 即时编译器:HotSpot虚拟机包含两个主要的JIT编译器...
【描述】:本篇文章旨在探讨Java内存模型中不同类型的变量——包括静态变量t1、实例变量t2和局部变量t3——在HotSpot VM中的存储位置。我们将借助HSDB(HotSpot Serviceability Agent的调试器)来探索实际运行时的...
Java HotSpot 客户端编译器设计 Java HotSpot 是 Sun Microsystems 开发的一款 Java 虚拟机(JVM),其中客户端编译器(Client Compiler)是 JVM 的核心组件之一。该编译器负责将 Java 字节码编译成机器代码,以...
以HotSpot VM为例,它使用了一种基于模板的优化技术。 ##### HotSpot VM实现细节 ```c void TemplateTable::iop2(Operation op) { transition(itos, itos); switch (op) { case add: __pop_i(rdx); __addl(rax, ...
HotSpot正是目前世界上java虚拟机的最好的实现。 HotSpot的基础代码是许多人辛勤劳动的结晶,这个过程迄今已持续了超过10年的时间(当然时间长并不意味着一定好,一半一半吧)。所以到现在为止,他的体积是很大的。...