这两天遇到了pergen space的问题,在晚上查了查发现还挺普遍,并且通过eclipse启动,通过bat启动或者linux下通过sh启动,处理方式是不一样的,不过都是调整jvm的大小
如果有遇到同样的问题参考这个http://www.cnblogs.com/my-king/p/4535274.html。
着里只是整理下jvm的几个参数分别代表什么意思。
先说堆内存分配:
-Xms 是最小堆内存
-Xmx 是最大堆内存
一般来说调整这两个就够了,当然还有在这个基础上更详细的设置,一般用不着就不细说了。
-XX:NewSize 设置年轻代大小
-XX:NewRatio 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio 年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize 设置持久代大小
如果大家看不懂上面的名字请参考这个http://www.iteye.com/topic/894148,图片画的很清楚。
然后再说下非堆的内存分配:
-XX:PermSize:表示非堆区初始内存分配大小
-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。
这里请注意,GC仅会清理PermGen中的常量池信息,而不会清理类元数据信息,所以设置大小的时候要注意。该结论推导过程参照http://bbs.csdn.net/topics/390369218,讨论帖最后回复。
先上个例子
-Xms128m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=512m
就是说jvm的堆区最小128最大1024,持久区最小256最大512