jdk1.7中堆内存分为:年轻代+老年代+永久代。但是永久代有作为非堆内存存在,也就是说堆内存的大小应该为年轻代+老年代。在tomcat容器中,如果jsp页面过多可能出现永久代溢出。通常栈溢出都是程序递归等方面的错误编码原因。jdk1.8中永久代(方法区)已经移到元数据区了。
- 堆内存分配
- 永久代内存大小
- 栈内存分配
堆内存分配
Xms800m Xmx800m Xmn300m -XX:SurvivoRatio=8 -XX:NewRation=2 或 -XX:NewRation=3
永久代(jdk1.7)
-XX:PermSize=200m -XX:MaxPermSize=400m
栈内存分配
-Xss128k #一般不会有人会设置这个,没有必要。
推荐的:
年轻代占堆内存的3/8左右,survivor占年轻代的1/10.
所以-XX:SurvivorRation=8, 因为survivor占年轻代的1/10,所以survivor1:survivor2:Eden = 1:1:8.
又因为-XX:SurvivorRation表示的是一个survivor与Eden的比值的倒数啊。所以是-XX:SurvivorRation=8。
但是这个3/8没的整(不是整数,不好整),可以取1/4-1/2这俩个相邻的值:
取1/4时候,年轻:老年为1:3,所以-XX:NewRatio=3
取1/2时候,年轻:老年为1:2,所以-XX:NewRatio=2