1. 程式人生 > >Java jvm內存調優(來自小強公開課)

Java jvm內存調優(來自小強公開課)

jvm

Java jvm內存調優

Jdkjava開發工具包

Jrejava運行環境,運行你編寫的java程序

Jvmjava虛擬機,.class文件在虛擬機上運行

如何選擇合適的java虛擬機

》》》選擇穩定的jdk(慎用新出的,新特性的)

》》》根據平臺和應用,選擇合適廠商的jdkHP-UX只能選擇HP JDK,AIX只能選擇IBM JDK;windows linux可以選擇SUN JDK;solaris平臺最好使用SUN JDK;開源JDK,目前生產環境中用的極少

》》》32bit or 64bit

》》》內存需求較小,CPU密集型應用選32bit

》》》大內存應用則選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,S1eden,Old區分配不合理

如何預防內存方面的問題

系統方面:

》》》足夠的物理內存

》》》最佳的堆設置

》》》穩定的OSjdk

》》》適當的垃圾回收算法策略

代碼方面:

》》》不要放置大量對象到session

》》》用完的資源一定要釋放,例如IOfilejdbc

》》》不要違反j2ee規範

》》》合理的從數據庫取得適量的數據(能從緩存拿就從緩存拿)

》》》好的代碼習慣


Java jvm內存調優(來自小強公開課)