如何计算Eden区的大小

如何计算Eden区的大小

题目

已知虚拟机的一些参数设置如下:
-Xms:1G;
-Xmx:2G;
-Xmn:500M;
-XX:MaxPermSize:64M;
-XX:+UseConcMarkSweepGC;
-XX:SurvivorRatio=3;
求Eden区域的大小?

分析

这是网易2016年在线笔试题中的一道选择题。
先分析一下里面各个参数的含义:
-Xms:1G , 就是说初始堆大小为1G
-Xmx:2G , 就是说最大堆大小为2G
-Xmn:500M ,就是说年轻代大小是500M(包括一个Eden和两个Survivor)
-XX:MaxPermSize:64M , 就是说设置持久代最大值为64M
-XX:+UseConcMarkSweepGC , 就是说使用使用CMS内存收集算法
-XX:SurvivorRatio=3 , 就是说Eden区与Survivor区的大小比值为3:1:1

题目中所问的Eden区的大小是指年轻代的大小,直接根据-Xmn:500M和-XX:SurvivorRatio=3可以直接计算得出

500M*(3/(3+1+1))
=500M*(3/5)
=500M*0.6
=300M
所以Eden区域的大小为300M。

小结

1,整个堆包括年轻代,老年代和持久代。其中年轻代又包括一个Eden区和两个Survivor区。
2,年轻代:
-XX:NewSize (for 1.3/1.4) ,
-XX:MaxNewSize (for 1.3/1.4) ,
-Xmn
3,持久代:
-XX:PermSize
-XX:MaxPermSize
4,年轻代和老年代的比例:
-XX:NewRatio(年轻代和老年代的比值,年轻代多,除去持久代)
当设置了-XX:+UseConcMarkSweepGC后,会使-XX:NewRatio=4失效,此时需要使用-Xmn设置年轻代大小
5,Eden与Survivor的比例
-XX:SurvivorRatio(Eden区与两个Survivor区的比值,Eden区多)

你可能感兴趣的:(Java面试)