JVM内存溢出原理
JVM内存溢出原理
一.堆内存溢出
1.原因
堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值
2.报错
报错类型:OutOfMemory:Java heap space
3.解决
程序出差,代码问题,优化代码
二.永久代溢出
1.原因
类的一些信息,如类名、访问修饰符、字段描述、方法描述等,所占空间大于永久代最大值
2.报错
报错类型:OutOfMemoryError:PermGen space
3.解决
给永久代分配更大内存空间
三.FullGC频率
FullGC频率:建议单次FullGC时间<200ms
四.JVM内存参数配置方案
1.栈内存
-Xss256k,线程栈大小,建议256k
2.堆内存
2.1初始堆内存
-Xms2048m,初始堆大小,建议<物理内存的1/4,默认值为物理内存的1/64
-Xmx2048m,最大堆大小,建议与-Xms保持一致,默认值为物理内存的1/4
2.2 新生代堆内存
-Xmn512m,新生代大小,建议不超过堆内存的1/2
2.3 新生代内存分配比例
-XX:SurvivorRatio=8:年轻带中Eden区和Survivor区的比例,默认为8:1,即Eden(8),From Space(1),ToSpace(1)
3.永久代内存
-XX:PermSize=256m,永久代初始值,默认值为物理内存的1/64
-XX:MaxPermSize=256m,永久代最大值,默认值为物理内存的1/4
4.开启CMS垃圾回收器
-XX:+UseConcMarkSweepGC:开启CMS垃圾回收器