根据应用程序设置JVM参数(一)-设置堆、新生代、老年代、持久代大小

本文介绍了如何根据应用程序的运行状况来确定JVM的堆、新生代、老年代和持久代大小。通过观察Full GC后的内存使用情况,设置-Xms、-Xmx、-XX:PermSize和-XX:MaxPermSize等参数,遵循通用法则和补充法则以优化Java性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


①、活跃的数据:

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性能优化权威指南》



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值