java应用高内存占用
在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鍵按內存排序)
2、使用jmap -histo:live [pid] 分析具體的對象數目和占用內存大小,從而定位代碼
注意:使用jmap命令會進行一次fgc
轉載于:https://www.cnblogs.com/sellsa/p/8931266.html
總結
以上是生活随笔為你收集整理的java应用高内存占用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【PAT】1007. 素数对猜想 (20
- 下一篇: tomcat架构分析(valve机制)