Java虛擬機(jī)(Java Virtual Machine, 縮寫JVM)
Java程序內(nèi)存主要分為:堆和非堆丁侄;
JVM管理堆和非堆梧喷。堆是運(yùn)行時(shí)數(shù)據(jù)區(qū)域(所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配)非堆是JVM自用的內(nèi)存區(qū)域(分為1.方法區(qū) 2.JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存 3. 每個(gè)類結(jié)構(gòu),方法和構(gòu)造器的代碼存儲(chǔ)區(qū))
GC(Garbage Collection 垃圾收集器)Java垃圾回收機(jī)制是由GC來(lái)實(shí)現(xiàn)的嫡意,GC是后臺(tái)的守護(hù)進(jìn)程。它的特別之處是它是一個(gè)低優(yōu)先級(jí)進(jìn)程,但是可以根據(jù)內(nèi)存的使用情況動(dòng)態(tài)的調(diào)整它的優(yōu)先級(jí)蝗锥。因此,它是在內(nèi)存中低到一定限度時(shí)才會(huì)自動(dòng)運(yùn)行率触,從而實(shí)現(xiàn)對(duì)內(nèi)存的回收终议。這就是垃圾回收的時(shí)間不確定的原因。GC主要回收的內(nèi)存是堆中的葱蝗。
堆內(nèi)存
堆內(nèi)存分為:新生代(NewGeneration)和老年代(OldGeneration)其大小比為1:2
新生代內(nèi)分為:一個(gè)Eden區(qū)和兩個(gè)Survivor區(qū)(分別叫from,to)其比例為Eden : from : to = 8 : 1 : 1
新生代內(nèi)存活對(duì)象少其GC:復(fù)制(copying) 算法
老年代內(nèi)存活對(duì)象多其GC:標(biāo)記-整理(Mark-Compact)算法
新生代和老年代GC:分代收集算法
GC_FOR_MALLOC:表示是在堆上分配對(duì)象時(shí)內(nèi)存不足觸發(fā)的GC
GC_CONCURRENT:當(dāng)我們的應(yīng)用程序的堆內(nèi)存達(dá)到一定量穴张,或者可以理解為快要滿的時(shí)候系統(tǒng)會(huì)自動(dòng)觸發(fā)的釋放內(nèi)存的GC操作
GC_EXPLICIT:表示是應(yīng)用程序調(diào)用System.gc, VMRuntime.gc接口或者收到SIGUSRI信號(hào)時(shí)觸發(fā)的GC
GC_BEFORE_OOM:表示是在準(zhǔn)備拋OOM異常之前進(jìn)行的最后努力而觸發(fā)的GC