JVM性能调优2JVM性能调优参数整理文档格式.docx

上传人:b****6 文档编号:16160351 上传时间:2022-11-21 格式:DOCX 页数:37 大小:25.86KB
下载 相关 举报
JVM性能调优2JVM性能调优参数整理文档格式.docx_第1页
第1页 / 共37页
JVM性能调优2JVM性能调优参数整理文档格式.docx_第2页
第2页 / 共37页
JVM性能调优2JVM性能调优参数整理文档格式.docx_第3页
第3页 / 共37页
JVM性能调优2JVM性能调优参数整理文档格式.docx_第4页
第4页 / 共37页
JVM性能调优2JVM性能调优参数整理文档格式.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

JVM性能调优2JVM性能调优参数整理文档格式.docx

《JVM性能调优2JVM性能调优参数整理文档格式.docx》由会员分享,可在线阅读,更多相关《JVM性能调优2JVM性能调优参数整理文档格式.docx(37页珍藏版)》请在冰豆网上搜索。

JVM性能调优2JVM性能调优参数整理文档格式.docx

默认32模式

4

-hotspot

在Hotspot类型的JVM中缺省使用,缺省为ClientHotspot模式。

默认client模式

5

-Xmixed

JVM执行模式的设置参数,混合模式即支持Hotspot即时编译的运行模式.

支持Hotspot的JVM缺省都是运行于混合模式的。

默认混合模式

-Xcomp

JVM优先以编译模式运行,不能编译的,以解释模式运行。

6

-Xint

设置JVM的执行模式为解释执行模式,纯解释执行的JVM对多数应用来说基本上时没有意义的,仅仅可能会在一些嵌入式系统中应用

7

内存分配相关参数

8

-Xms<

size>

设置JVM启动时初始内存堆的大小

1.6

物理内存的1/64.

9

-Xmx<

设置JVM启动后动态申请堆内存的最大堆空间

MIN(物理内存的1/4,1G)

10

-Xmn<

为新生代分配的内存大小。

和cpu核数相关,建议1core对应512M,不超过1G。

11

-Xss<

设置JVM线程栈的空间最大值。

当设置值小于64K时,用默认值。

12

-XX:

ThreadStackSize=512

每个线程栈大小(K),等于0时表示使用缺省值

Sparc:

512K,SolarisIntel:

256K,Sparc64bit:

1024其他的都为0

13

NewRatio=2

新生代内存容量与老生代内存容量的比例。

Ratioofnew/oldgenerationsizes.Thedefaultvalueis2.

Client模式默认8,Server模式:

14

MaxNewSize=size

Maximumsizeofnewgeneration(inbytes).Since1.4,MaxNewSizeiscomputedasafunctionofNewRatio.[1.3.1Sparc:

32m;

1.3.1x86:

2.5m.]

15

NewSize=2m

新生代预估默认值。

Defaultsizeofnewgeneration(inbytes)[5.0andnewer:

64bitVMsarescaled30%larger;

x86:

1m;

x86,5.0andolder:

640k]

2228K

16

SurvivorRatio=64

存活区和eden区所占的比率:

2:

64。

Ratioofeden/survivorspacesize.

32

17

PermSize=256m

为持久代分配的初始化内存空间。

18

MaxPermSize=256m

为持久代分配的最大内存空间。

client/server:

64M

19

MaxTenuringThreshold=30

每次垃圾收集在新生代之间Copy的次数,超过该次数则移至Old区。

Maximumvaluefortenuringthreshold.Thedefaultvalueis15.

Thedefaultvalueis15fortheparallelcollectorandis4forCMS.

20

TargetSurvivorRatio=50

该值是一个百分比,控制允许使用的生存区空间的比例。

该参数设置较大的话可提高对survivor空间的使用率。

默认值是50。

即占到50%,则执行Copy策略。

21

PretenureSizeThreshold=64K

当申请内存的对象超过该值时,直接在old区分配。

默认值是0,即所有的对象都在Eden区分配。

22

MaxHeapFreeRatio=size

JVM中堆空间的最大预估值空闲百分比。

GC进行垃圾收集时后,如果预估值堆空闲空间超过预定值,收缩预估值内存。

默认值70

23

MinHeapFreeRatio=size

JVM中堆空间的最小预估值空闲百分比。

GC进行垃圾收集后,堆空间不得低于预定值,增加分配的内存。

默认值40

MaxDirectMemorySize=size

直接内存最大值。

即NIO进行操作时,可以分配的最大缓存值,默认和heap最大值一致。

默认和heap最大值一致。

24

JVM优化

25

CompileThreshold=10000

设置方法是否进行即时编译的调用次数的下限值。

调用次数超过设定值,进行JIT编译。

-server选项的缺省值为10000,-client选项的缺省值为1500

+BackgroundCompilation

后台启用jit编译

26

-CITime

设置Hotspot的一次即时编译所需要的最大时间

27

+AggressiveOpts

启用激进的编译优化

JDK5update6后引入,但需要手动启用。

JDK6默认启用。

28

+UseFastAccessorMethods

原始类型的快速优化,get,set方法转成本地代码。

29

+DoEscapeAnalysis

增加逃逸分析。

如果对象的指针未出创建者的方法体,该对象在线程栈内直接分配空间。

30

+DisableExplicitGC

屏蔽程序主动垃圾收集的函数system.gc()

31

FreqInlineSize=size

限制经常使用的动态编译的函数的虚拟机指令的最大数量, 

+UseLargePages

启用大内存分页。

注意操作系统需支持。

关联参数:

LargePageSizeInBytes=4m

33

设置堆内存的内存页大小。

默认4K。

34

+UseBiasedLocking

启用偏向锁。

35

+UseSpinning

启用多线程自旋锁优化。

自旋锁优化原理

大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意。

原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖操作系统互斥(mutex)来实现的。

互斥是一种会导致线程挂起,并在较短的时间内又必须重新调度回原线程的,较为消耗资源的操作。

为了避免进入OS互斥,Java6的开发者们提出了自旋锁优化。

自旋锁优化的原理是在线程进入OS互斥前,通过CAS自旋一定的次数来检测锁的释放。

如果在自旋次数未达到预设值前锁已被释放,则当前线程会立即持有该锁。

java1.4.2和1.5需要手动启用,java6默认已启用

36

PreBlockSpin=10

控制多线程自旋锁优化的自旋次数。

(什么是自旋锁优化?

见-XX:

+UseSpinning处的描述)

关联选项:

java6来说已经默认启用了,这里默认自旋10次

37

+UseSplitVerifier

使用新的Class类型校验器。

新Class类型校验器有什么特点?

新Class类型校验器,将老的校验步骤拆分成了两步:

1,类型推断。

2,类型校验。

新类型校验器通过在javac编译时嵌入类型信息到bytecode中,省略了类型推断这一步,从而提升了classloader的性能。

Classload顺序(供参考)

load->

verify->

prepare->

resove->

init

+FailOverToOldVerifier

java5默认不启用

java6默认启用

38

如果新的Class校验器检查失败,则使用老的校验器。

为什么会失败?

因为JDK6最高向下兼容到JDK1.2,而JDK1.2的classinfo与JDK6的info存在较大的差异,所以新校验器可能会出现校验失败的情况。

Java6新引入选项,默认启用

39

+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

+UseTLAB

启用线程本地缓存区(ThreadLocal)。

1.4.2以前和使用-client选项时,默认不启用,其余版本默认启用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1