码迷,mamicode.com
首页 > 其他好文 > 详细

根据应用程序设置JVM参数

时间:2015-08-27 18:44:15      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:测试   jvm   java性能优化   

一、根据程序的运行状况查看其活跃的数据量


①、活跃的数据:

1.应用程序运行于稳定状态时,老年代占用的java堆大小

2.应用程序运行于稳定状态时,永久代占用的java堆大小


其实就是FullGc后这2个数据的大小


②、动手测试:
1.测试代码:

public class A {
	int[] storage = new int[102400];
	int[] extra = new int[200000];

	public int[] execute() {
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return storage;
	}
}



import java.util.LinkedList;
import java.util.Queue;

public class Test {

	public static void main(String[] args) {
		Queue<int[]> queue = new LinkedList<int[]>();
		while (true) {
			int[] tmp=new A().execute();
			if (queue.size() > 1000) {
				queue.poll();
			} else {
				queue.offer(tmp);
			}
		}

	}
}

2.参数配置:


技术分享


3.测试的结果


技术分享


4.结果分析

可以看到老年代的大小为404211K,持久代的大小为8888K




二、通过活跃的数据配置堆以及其他参数


通用法则1:

将java堆的初始值-Xms和最大值-Xmx设置为老年代活跃数据大小的3~4倍

所以此处就设置 -Xms1600m,-Xmx1600m

在以上的测试结果中可以看到原始的堆大小为1675m左右,是比较接近的。


通用法则2:

永久带的初始值-XX:PermSize及最大值-XX:MaxPermSize应该比永久代活跃数据大1.2~1.5倍

所以此处就设置-XX:PermSize=13m,-XX:MaxPermSize=13m


补充法则:

新生代空间应该为老年代空间活跃数据的1~1.5倍

此处老年代为400m,新生代就为600m

如果java堆的初始值及最大值为活跃数据的3~4倍,新生代为活跃数据的1~1.5倍时,老年代应设置为活跃数据大小的2~3倍




三、参考表


技术分享



参考:《java性能优化权威指南》



版权声明:本文为博主原创文章,未经博主允许不得转载。

根据应用程序设置JVM参数

标签:测试   jvm   java性能优化   

原文地址:http://blog.csdn.net/q291611265/article/details/48030523

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!