Java虚拟机内存分配策略
1.JVM內(nèi)存分配分區(qū)
Java的內(nèi)存簡(jiǎn)單分為堆內(nèi)存和非堆內(nèi)存
其中堆內(nèi)存又可以分為新生代和老年代
新生代分為1個(gè)Eden區(qū)和2個(gè)Survivor區(qū),如下圖:
2.JVM垃圾回收種類
分為2種,MinorGC和FullGC.
MinorGC針對(duì)新生代的內(nèi)存回收,時(shí)間較短,經(jīng)常發(fā)生。
FullGC針對(duì)老年代的回收,通常伴隨MinorGC,耗費(fèi)時(shí)間較久,較少發(fā)生。
3.JVM內(nèi)存分配策略
(1)先在Eden區(qū)分配,如果不夠分配的話,發(fā)生MinorGC。
(2)進(jìn)行MinorGC時(shí),會(huì)把Eden中有在使用的對(duì)象放到其中一個(gè)Survivor中。如果Survivor中放不下,則會(huì)進(jìn)入老年代。
(3)每次進(jìn)行MinorGC時(shí),在Survivor中存活的對(duì)象會(huì)增加1歲,默認(rèn)超過(guò)15歲的對(duì)象(MaxTenuringThreshold),會(huì)進(jìn)入老年代。
(4)JVM的參數(shù)有一個(gè)叫PretenureSizeThreshold,大小超過(guò)這個(gè)值的對(duì)象會(huì)直接進(jìn)入老年代。
4.垃圾回收器種類
Serial/Serial Old
(1)適合單個(gè)CPU
(2)Serial采用復(fù)制算法,適合新生代
(3)Serial Old采用標(biāo)記-整理算法,適合老年代
ParNew
(1)多線程,并行
Parallel Scavenge
(1)適合新生代,并行
(2)適合后臺(tái)運(yùn)算的任務(wù),追求的是吞吐量,支持參數(shù)自適應(yīng)
Parallel Old
(1)適合老年代,與Parallel Scavenge搭配使用
CMS(Consurrent Mark Sweep)
(1)追求短停頓,采用標(biāo)記-清除算法
(2)無(wú)法處理浮動(dòng)垃圾
(3)要求CPU較多
G1
(1)并行+并發(fā)
(2)分代采用不同算法進(jìn)行收集
(3)標(biāo)記整理+復(fù)制算法
(4)可預(yù)測(cè)停頓時(shí)間
總結(jié)
以上是生活随笔為你收集整理的Java虚拟机内存分配策略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 查找出现次数超过一半的数
- 下一篇: Java正则表达式简单用法