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垃圾回收器

posted @ 2023-06-27 17:09  常疯大虾  阅读(51)  评论(0编辑  收藏  举报