JVM之---Java內存分配參數(第四篇)


1.內存分配參數---大綱

  1. Ø如何設置堆內存
  2. Ø如何設置棧內存
  3. Ø如何設置方法區
  4. Ø如何設置對的分配比率
  5. Ø設置參數打印堆棧;
  6. ØJava程序的兩種模式:Server&Client

 

 

2.設置堆內存

Ø設置最大堆內存
Ø參數:-Xmx10M,表示堆內存最大為10M,如果超過10M則會出現內存溢出的異常。
Ø查看方法: maxMemory()
Ø設置最小堆內存
Ø參數:-Xms2M,系統初始化的時候就會分配2M內存給java程序。
Ø設置新生代內存
Ø參數1:-Xmn5M,表示堆內存中新生代內存大小為5M,如果超過則會向老年代申請空間。
Ø參數2:-XX:NewSize(最小的新生代大小)-XX:MaxNewSize(最大的新生代大小)
Ø-Xmn5M==-XX:NewSize5M –XX:MaxNewSize5M
Ø參數2不建議使用,會引起內存震盪。

3、方法區內存

Ø之前說過,對於使用了CGLib,Javassist,ASM等動態生成大量class類的框架尤其需要注意該內存的設置。
Ø最小設置
Ø參數:-XX:PermSize=4M;
Ø解釋:表示方法區最小的內存為4M,JVM初始化的時候就會分配至少4M的方法區內存。
Ø最大設置
Ø參數:-XX:MaxPermSize=10M
Ø解釋:表示方法區最大的內存為10M,當動態擴展超過10M的時候就會出現內存溢出。

4、棧內存

Ø棧內存貌似沒有設置最大最小的參數,根據我的理解配置的參數是最大的,也就是說最大不能超過,如果沒有線程則不會分配,這樣應該是合理的,他的生命周期和線程一樣。
Ø配置參數:-Xss10M
Ø解釋:表示為沒一個線程分配10M的空間
Ø注意事項:
Ø如果一個線程的內存使用超過了-Xss的設置則會拋出異常
Ø如果給棧內存設置較大,則同時開啟的線程數必然減少。
Ø棧內存的大小還會影響到堆內存的大小;

5、分配比率

Ø堆的分配比率:
Ø新生代:占據整個堆的1/4~1/3為最佳
Ø新生代和s區的分配:最好設置為8:1為最佳
Ø配置參數:-XX:SurvivorRatio=8
Ø新生代和老年代的分配:最好設置為2:1為最佳
Ø配置參數:-XX:NewRatio=2

6、參數總結

配置

說明

-Xms

設置堆內存的最小值

-Xmx

設置堆內存的最大值

-Xss

設置棧內存的大小

-XX:MinHeapFreeRatio

設置堆內存的最小空閑比例

-XX:MaxHeapFreeRatio

這是堆內存的最大空閑比例

-XX:NewSize

設置新生代的最小內存值

-XX:NewMaxSize

設置新生代的最大內存值

-XX:SurviorRatio

設置Eden區和Survior區的比例

-XX:MaxPermSize

設置持久代的最大值

-XX:PermSize

設置持久代的最小值

-XX:TargetSurvivorRatio

設置survivor區的可使用率


7、打印GC信息

Ø不論是在進行MinorGC還是FullGC,使用該參數都可以當前的內存使用情況;
Ø參數如下:
Ø-XX:+PrintGCDetails
Ø-verbose:gc

Ø上面兩個都可以,第一個較為詳細!

8、Java運行模式

ØJava不會顯式的制定運行的模式,JVM會根據內存的大小自動進行判斷,主要有Server和Client兩種模式。
ØServer模式
Ø啟動速度慢
Ø運行速度快
ØJVM在Server模式默認-Xms是128M,-Xmx是1024M
ØClient模式
Ø啟動速度快
Ø運行速度沒有Server模式快
ØJVM在client模式默認-Xms是1M,-Xmx是64M

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM