首页 > 科技 >

如何合理的规划一次jvm性能调优(4)

2019-01-08 14:34:52 网络整理 阅读:107 评论:0

2、jvm内存分配&参数

jvm堆中主要的空间,就是以上新生代、老生代、永久代组成,整个堆大小=新生代大小 + 老生代大小 + 永久代大小。 具体的对象提升方式,这里不再过多介绍了,我们看下一些jvm命令参数,对堆大小的指定。如果不采用以下参数进行指定的话,虚拟机会自动选择合适的值,同时也会基于系统的开销自动调整。

分代

参数

描述

堆大小

-Xms

初始堆大小,,默认为物理内存的1/64(<1GB)

-Xmx

最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制

新生代

-XX:NewSize

新生代空间大小初始值

-XX:MaxNewSize

新生代空间大小最大值

-Xmn

新生代空间大小,此处的大小是(eden+2 survivor space)

永久代

-XX:PermSize

永久代空间的初始值&最小值

-XX:MaxPermSize

永久代空间的最大值

老年代

老年代的空间大小会根据新生代的大小隐式设定

初始值=-Xmx减去-XX:NewSize的值

最小值=-Xmx值减去-XX:MaxNewSize的值

在设置的时候,如果关注性能开销的话,应尽量把永久代的初始值与最大值设置为同一值,因为永久代的大小调整需要进行FullGC 才能实现。

3、计算活跃数据大小

计算活跃数据大小应该遵循以下流程:

如前所述,活跃数据应该是基于应用程序稳定阶段时,观察长期存活与对象在java堆中占用的空间大小。

计算活跃数据时应该确保以下条件发生:

1.测试时,启动参数采用jvm默认参数,不人为设置。

2.确保Full GC 发生时,应用程序正处于稳定阶段。

采用jvm默认参数启动,是为了观察应用程序在稳定阶段的所需要的内存使用。

相关文章