jvm 内存溢出

堆内存溢出

  堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java heap space

永久代溢出

  类的一些信息,如类名、访问修饰符、字段描述、方法描述等,所占空间大于永久代最大值,就会出现OutOfMemoryError:PermGen space

内存溢出的检测方法

Jdk/bin目录下有很多检测工

图形界面: Jconsole Jvisualvm

命令行工具

  Jstat –gcutil pid 1000 100      FullGC频率:单次FullGC时间<200ms

  

  Jmap –histo pid | head -20

  

  Jmap –heap pid

  

工程日志报错

jvm 常见参数

  -Xms2048m,初始堆大小,建议<物理内存的1/4,默认值为物理内存的1/64

  -Xmx2048m,最大堆大小,建议与-Xms保持一致,默认值为物理内存的1/4

  -Xmn512m,新生代大小,建议不超过堆内存的1/2 -Xss256k,线程年轻代堆栈大小,建议256k

  -XX:PermSize=256m,永久代初始值,默认值为物理内存的1/64

  -XX:MaxPermSize=256m,永久代最大值,默认值为物理内存的1/4

  -XX:SurvivorRatio=8:年轻带中Eden区和Survivor区的比例,默认为8:1,即Eden(8),From Space(1),ToSpace(1)

  -XX:+UseConcMarkSweepGC:开启CMS垃圾回收器

jmap -histo pid 查看收集对象信息(对象大小的收集)

jmap -histo pid | head -20 查看前20个对象信息

原文地址:https://www.cnblogs.com/dwdw/p/11020544.html