`
terry0501
  • 浏览: 306054 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JVM 垃圾回收

阅读更多

摘要:一、根据程序的运行状况查看其活跃的数据量①、活跃的数据:1.应用程序运行于稳定状态时,老年代占用的java堆大小2.应用程序运行于稳定状态时,永久代占用的java堆大小其实就是FullGc后这2个数据的大小②、动手测试:1.测试代码:publicclassA{int[]storage=newint[102400];int[]extra=newint[200000];publicint[]execute(){try{Thread.sleep(10);}catch(Interru
一、根据程序的运行状况查看其活跃的数据量



①、活跃的数据:

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倍

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics