Java jvm內存調優java
Jdk:java開發工具包linux
Jre:java運行環境,運行你編寫的java程序算法
Jvm:java虛擬機,.class文件在虛擬機上運行數據庫
如何選擇合適的java虛擬機windows
》》》選擇穩定的jdk(慎用新出的,新特性的)緩存
》》》根據平臺和應用,選擇合適廠商的jdk。HP-UX只能選擇HP JDK,AIX只能選擇IBM JDK;windows 、linux能夠選擇SUN JDK;solaris平臺最好使用SUN JDK;開源JDK,目前生產環境中用的極少session
》》》32bit or 64bitjvm
》》》內存需求較小,CPU密集型應用選32bitide
》》》大內存應用則選64bit(突破4G內存限制、吞吐量稍高)工具
Java內存
》》》Java內存 = 堆內存+非堆內存
》》》堆內存 = 年輕代+年老代 -Xms(最小)-Xmx(最大)
》》》非堆內存 = 永久代+其餘 -XX:Pemsize -XX:MaxPermSise
》》》最新的java8中的jvm已經去掉了永久代,以Metaspace元空間代替
內存典型問題
》》》OOM VS ML
》》》OOM內存溢出,是程序在申請內存時,沒有足夠的內存供其使用
》》》ML內存泄露,是指程序在申請內存後,沒法釋放已申請的內存空間,致使這塊內存一直佔用
》》》最終表現基本是同樣的,一般內存泄露ML最終會致使OOM錯誤。實際應用中不要太過糾結或劃清界限,每種現象都是關聯的。
內存問題常發生在什麼區域
》》》heap堆內存和pemanent區
》》》JVM進程內存和java使用的第三方本地代碼
好比:
》》》java堆內存不足,沒法再分配新對象或內存塊
》》》java堆內存充足,可是S0,S1,eden,Old區分配不合理
如何預防內存方面的問題
系統方面:
》》》足夠的物理內存
》》》最佳的堆設置
》》》穩定的OS,jdk等
》》》適當的垃圾回收算法策略
代碼方面:
》》》不要放置大量對象到session中
》》》用完的資源必定要釋放,例如IO,file,jdbc
》》》不要違反j2ee規範
》》》合理的從數據庫取得適量的數據(能從緩存拿就從緩存拿)
》》》好的代碼習慣