JVM性能调优2JVM性能调优参数整理.docx
- 文档编号:3254795
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:37
- 大小:25.86KB
JVM性能调优2JVM性能调优参数整理.docx
《JVM性能调优2JVM性能调优参数整理.docx》由会员分享,可在线阅读,更多相关《JVM性能调优2JVM性能调优参数整理.docx(37页珍藏版)》请在冰豆网上搜索。
JVM性能调优2JVM性能调优参数整理
序号
参数名
说明
JDK
默认值
使用过
1
JVM执行模式
2
-client
-server
设置该JVM运行与Client或者ServerHotspot模式,这两种模式从本质上来说是在JVM中运行不同的JIT(运行时编译模块)代码,并且两者在JVM内部的接口是一致的。
客户端模式优化的是系统启动时间更快,而服务端模式的优化则更关注与系统的整体性能。
一般来说Client选项用于GUI的应用,Server选项多用于后台服务器应用。
另外两者在编译策略、垃圾收集策略、堆使用上也有所不同
是
3
-d32
-d64
指明该JavaVM是运行与32位环境还是64位环境,默认是运行在32位环境下的,如果是配置了64位模式则需要操作系统也必须是64位的,当然CPU更需要是64位的。
另外如果我们选择了-server参数,则就暗含了64位模式。
默认32模式
4
-hotspot
在Hotspot类型的JVM中缺省使用,缺省为ClientHotspot模式。
默认client模式
5
-Xmixed
JVM执行模式的设置参数,混合模式即支持Hotspot即时编译的运行模式.
支持Hotspot的JVM缺省都是运行于混合模式的。
默认混合模式
-Xcomp
JVM优先以编译模式运行,不能编译的,以解释模式运行。
6
-Xint
设置JVM的执行模式为解释执行模式,纯解释执行的JVM对多数应用来说基本上时没有意义的,仅仅可能会在一些嵌入式系统中应用
7
内存分配相关参数
8
-Xms
设置JVM启动时初始内存堆的大小
1.6
物理内存的1/64.
是
9
-Xmx
设置JVM启动后动态申请堆内存的最大堆空间
1.6
MIN(物理内存的1/4,1G)
是
10
-Xmn
为新生代分配的内存大小。
和cpu核数相关,建议1core对应512M,不超过1G。
是
11
-Xss
设置JVM线程栈的空间最大值。
1.6
当设置值小于64K时,用默认值。
是
12
-XX:
ThreadStackSize=512
每个线程栈大小(K),等于0时表示使用缺省值
Sparc:
512K,SolarisIntel:
256K,Sparc64bit:
1024其他的都为0
13
-XX:
NewRatio=2
新生代内存容量与老生代内存容量的比例。
Ratioofnew/oldgenerationsizes.Thedefaultvalueis2.
1.6
Client模式默认8,Server模式:
2
是
14
-XX:
MaxNewSize=size
Maximumsizeofnewgeneration(inbytes).Since1.4,MaxNewSizeiscomputedasafunctionofNewRatio.[1.3.1Sparc:
32m;1.3.1x86:
2.5m.]
15
-XX:
NewSize=2m
新生代预估默认值。
Defaultsizeofnewgeneration(inbytes)[5.0andnewer:
64bitVMsarescaled30%larger;x86:
1m;x86,5.0andolder:
640k]
1.6
2228K
16
-XX:
SurvivorRatio=64
存活区和eden区所占的比率:
2:
64。
Ratioofeden/survivorspacesize.
1.6
32
是
17
-XX:
PermSize=256m
为持久代分配的初始化内存空间。
18
-XX:
MaxPermSize=256m
为持久代分配的最大内存空间。
client/server:
64M
是
19
-XX:
MaxTenuringThreshold=30
每次垃圾收集在新生代之间Copy的次数,超过该次数则移至Old区。
Maximumvaluefortenuringthreshold.Thedefaultvalueis15.
Thedefaultvalueis15fortheparallelcollectorandis4forCMS.
是
20
-XX:
TargetSurvivorRatio=50
该值是一个百分比,控制允许使用的生存区空间的比例。
该参数设置较大的话可提高对survivor空间的使用率。
默认值是50。
即占到50%,则执行Copy策略。
是
21
-XX:
PretenureSizeThreshold=64K
当申请内存的对象超过该值时,直接在old区分配。
默认值是0,即所有的对象都在Eden区分配。
22
-XX:
MaxHeapFreeRatio=size
JVM中堆空间的最大预估值空闲百分比。
GC进行垃圾收集时后,如果预估值堆空闲空间超过预定值,收缩预估值内存。
默认值70
是
23
-XX:
MinHeapFreeRatio=size
JVM中堆空间的最小预估值空闲百分比。
GC进行垃圾收集后,堆空间不得低于预定值,增加分配的内存。
默认值40
是
-XX:
MaxDirectMemorySize=size
直接内存最大值。
即NIO进行操作时,可以分配的最大缓存值,默认和heap最大值一致。
默认和heap最大值一致。
24
JVM优化
25
-XX:
CompileThreshold=10000
设置方法是否进行即时编译的调用次数的下限值。
调用次数超过设定值,进行JIT编译。
-server选项的缺省值为10000,-client选项的缺省值为1500
是
-XX:
+BackgroundCompilation
后台启用jit编译
26
-XX:
-CITime
设置Hotspot的一次即时编译所需要的最大时间
27
-XX:
+AggressiveOpts
启用激进的编译优化
JDK5update6后引入,但需要手动启用。
JDK6默认启用。
28
-XX:
+UseFastAccessorMethods
原始类型的快速优化,get,set方法转成本地代码。
29
-XX:
+DoEscapeAnalysis
增加逃逸分析。
如果对象的指针未出创建者的方法体,该对象在线程栈内直接分配空间。
1.6
30
-XX:
+DisableExplicitGC
屏蔽程序主动垃圾收集的函数system.gc()
是
31
-XX:
FreqInlineSize=size
限制经常使用的动态编译的函数的虚拟机指令的最大数量,
32
-XX:
+UseLargePages
启用大内存分页。
注意操作系统需支持。
关联参数:
-XX:
LargePageSizeInBytes=4m
33
-XX:
LargePageSizeInBytes=4m
设置堆内存的内存页大小。
默认4K。
34
-XX:
+UseBiasedLocking
启用偏向锁。
JDK5update6后引入,但需要手动启用。
JDK6默认启用。
35
-XX:
+UseSpinning
启用多线程自旋锁优化。
自旋锁优化原理
大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意。
原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖操作系统互斥(mutex)来实现的。
互斥是一种会导致线程挂起,并在较短的时间内又必须重新调度回原线程的,较为消耗资源的操作。
为了避免进入OS互斥,Java6的开发者们提出了自旋锁优化。
自旋锁优化的原理是在线程进入OS互斥前,通过CAS自旋一定的次数来检测锁的释放。
如果在自旋次数未达到预设值前锁已被释放,则当前线程会立即持有该锁。
java1.4.2和1.5需要手动启用,java6默认已启用
36
-XX:
PreBlockSpin=10
控制多线程自旋锁优化的自旋次数。
(什么是自旋锁优化?
见-XX:
+UseSpinning处的描述)
关联选项:
-XX:
+UseSpinning
java6来说已经默认启用了,这里默认自旋10次
37
-XX:
+UseSplitVerifier
使用新的Class类型校验器。
新Class类型校验器有什么特点?
新Class类型校验器,将老的校验步骤拆分成了两步:
1,类型推断。
2,类型校验。
新类型校验器通过在javac编译时嵌入类型信息到bytecode中,省略了类型推断这一步,从而提升了classloader的性能。
Classload顺序(供参考)
load->verify->prepare->resove->init
关联选项:
-XX:
+FailOverToOldVerifier
java5默认不启用
java6默认启用
38
-XX:
+FailOverToOldVerifier
如果新的Class校验器检查失败,则使用老的校验器。
为什么会失败?
因为JDK6最高向下兼容到JDK1.2,而JDK1.2的classinfo与JDK6的info存在较大的差异,所以新校验器可能会出现校验失败的情况。
关联选项:
-XX:
+UseSplitVerifier
Java6新引入选项,默认启用
39
-XX:
+HandlePromotionFailure
关闭新生代收集担保。
在一次理想化的minorgc中,Eden和FirstSurvivor中的活跃对象会被复制到SecondSurvivor。
然而,SecondSurvivor不一定能容纳下所有从E和F区copy过来的活跃对象。
为了确保minorgc能够顺利完成,GC需要在年老代中额外保留一块足以容纳所有活跃对象的内存空间。
这个预留操作,就被称之为新生代收集担保(NewGenerationGuarantee)。
如果预留操作无法完成时,仍会触发majorgc(fullgc)。
为什么要关闭新生代收集担保?
因为在年老代中预留的空间大小,是无法精确计算的。
为了确保极端情况的发生,GC参考了最坏情况下的新生代内存占用,即Eden+FirstSurvivor。
这种策略无疑是在浪费年老代内存,从时序角度看,还会提前触发FullGC。
为了避免如上情况的发生,JVM允许开发者手动关闭新生代收集担保。
在开启本选项后,minorgc将不再提供新生代收集担保,而是在出现survior或年老代不够用时,抛出promotionfailed异常。
java5以前是默认不启用,java6默认启用
40
-XX:
+UseTLAB
启用线程本地缓存区(ThreadLocal)。
1.4.2以前和使用-client选项时,默认不启用,其余版本默认启用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JVM 性能 参数 整理