喜欢研究学习技术,喜欢和志同道合的人交流。 从事测试6年,专职性能3年经验,擅长性能测试,测试框架开发。 励志格言:只要想学习,永远都不会太晚;只要想进步,永远都会有空间。

JVM调优之XMS参数调优测试

上一篇 / 下一篇  2018-06-20 10:40:02 / 个人分类:性能测试

  在java程序中,可以通过xms参数来调节jvm最小堆内存空间,也就是jvm启动时,需要占据的操作系统的内存值的大小。
java程序中通过-xms来指定最小堆内存空间大小,当-xms的值 确实较小,无法满足应用程序时,jvm才向操作系统申请更多的内存,直到超出xmx最大堆内存的值为止,若超过xmx的最大值则JVM会抛出OutOfMenoryError异常。下面通过一段程序来进行演示:

1、创建一个集合,往集合中存放一个1M大小的数组,当空间大于3M的时候进行一次GC操作。
public class TestXms {

public static void main(String[] args) {
// TODO Auto-generated method stub
//创建list集合,存放数组对象
ArrayList list=new ArrayList();
for (int i = 1; i<=10; i++) {
//创建数组,为数组初始化空间大小
byte []b =new byte[1024*1024];
list.add(b);
//每次分配1m的内存空间,累计空间超过3M时,进行对象清理
if(list.size()==3){
list.clear();
}
}
}

}

2、指定Eclipse中的-xms -xmx的运行参数
图片

3、运行结果
  从运行结果可以看出JVM总共执行了10次的young GC操作,两次的full GC操作。

图片
4、调优。为了减少young GC的操作,此时调整xms最小堆内存的大小为11M,与最大堆内存设置一致。再次运行应用程序。
图片


5、调优后运行结果。调优-xms的参数后,再次运行应用程序发现,young GC的次数明显减少。程序执行效率得到明显的提升。
图片
6、结论:
jvm会试图将操作系统内存尽可能的限制在xms的值范围内,当xms的值不足时,jvm再从xmx中获取到更多的堆内存空间,直到xmx的值不足时,才OOMERROE报错。当内存的使用量触及到xms的值大小时,就会执行一次full GC操作。因此将xmx与xms值设置一致,在系统运行的初始阶段就可以避免更多的gC次数和full GC的耗时。以及每次GC操作后,进行堆内存空间分配,对性能的消耗。

TAG:

 

评分:0

我来说两句

Open Toolbar