java应用高内存占用

时间:2021-04-18 20:50:23

在java虚拟机中,内存分为三个代:新生代(New), 老生代(Old)永久代(Perm)

 

新生代: 新建的对象都存放这里
老生代:存放从新生代中迁移过来的生命周期较久的对象。新生代和老生代共同组成了堆内存
永久代:非堆内存组成部分。主要加载的Class类级对象和class本身,method,field等等


如果出现java.lang.OutOfMemoryError: Java heap space异常,说明堆内存不够
原因有二:
  (1)Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。
  (2)代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。


出现java.lang.OutOfMemoryError: PermGen space,说明是永久代Perm内存设置不够。
  一般出现这种情况,都是程序启动需要加载大量的第三方jar包
  例如:在一个Tomcat下部署了太多的应用。

 

java.lang.OutOfMemoryError: Java heap space异常故障排查,下面是分析排查步骤

1、通过top命令找出内存占用高的java进程(M键按内存排序)

java应用高内存占用

2、使用jmap -histo:live [pid] 分析具体的对象数目和占用内存大小,从而定位代码

java应用高内存占用

注意:使用jmap命令会进行一次fgc