Xms Xmx PermSize MaxPermSize的區別

1.參數的含義

vmargs -Xms 128M -Xmx 512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 代表後面是設置jvm的參數
-Xms 128M JVM設置最小分配的堆內存
-Xmx 512M JVM允許最大分配的堆內存,按需分配
-XX:PermSize=64M JVM設置分配最小的非堆內存
-XX:MaxPermSize=128M JVM最大允許分配的非堆內存,按需分配

2.堆與非堆內存

堆內存(Heap):運行時數據區域,所有類實例與數組的內存均從此處分配。堆是在java虛擬機啓動時創建的。堆內存留給開發人員使用。
非堆內存(no-Heap):除堆以外的內存就是非堆內存,非堆內存是留給jvm自己用的。比如方法區、jvm內部優化所需內存、每個類結構、方法以及構造方法的代碼都在非堆內存中。

堆內存的分配
-Xms爲最小分配的堆內存,默認爲物理內存的1/64 ; -Xmx爲最大分配的堆內存,默認爲物理內存的1/4。當默認空餘堆內存小於40%,JVM堆內存就會增加至-Xmx;當默認空餘堆內存大於70%,JVM 堆內存就會減小至-Xms。因此服務器每次設置-Xms與-Xmx的大小相等,避免每次GC後調整堆的大小。
說明:如果-Xmx不指定或者指定偏小,可能會導致java.lang.OutOfMemory錯誤。

非堆內存的分配
-XX:PermSize爲最小分配非堆內存,默認爲物理內存的1/64; -XX:MaxPermSize爲最大分配的非堆內存,默認爲1/4。
說明:如果 -XX:MaxPermSize設置過小,可能會導致java.lang.OutOfMemoryError: PermGen space 就是內存溢出。
內存溢出產生的原因:
1)這一部分用來存放class或者meta信息,Class在被加載的時候直接存放在PermGen Space區域,它與Instance存放的Heap區域不同。
2)PermGen Space區域在主程序運行的過程中不會GC,因此當程序load太多的class的時候就會發生內存溢出。

3:調整JVM的參數

1)在eclipse根目錄eclipse.ini中配置JVM參數
2)修改jdk使用內存
Window->preferences->java-Installed JRE->edit->Default VM Arguments
3)修改Run Configurations
Run As->Run Configurations->Arguments,在VM arguments中填入即可

參考博客:http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章