马士兵JVM课程笔记
馬士兵JVM課程筆記
GC和GC Tuning
GC的基礎(chǔ)知識
1.什么是垃圾
C語言申請內(nèi)存:malloc free
C++: new delete
c/C++ 手動回收內(nèi)存
Java: new ?
自動內(nèi)存回收,編程上簡單,系統(tǒng)不容易出錯,手動釋放內(nèi)存,容易出兩種類型的問題:
沒有任何引用指向的一個對象或者多個對象(循環(huán)引用)
2.如何定位垃圾
3.常見的垃圾回收算法
1.標(biāo)記清除(Mark-Sweep)
老年代一般是由標(biāo)記清除或者是標(biāo)記清除與標(biāo)記整理的混合實(shí)現(xiàn)
- 原理
當(dāng)堆中的有效內(nèi)存空間(available memory)被耗盡的時候,就會停止整個程序(也被稱為stop the world),然后進(jìn)行兩項工作,第一項則是標(biāo)記,第二項則是清除。
標(biāo)記:從引用根節(jié)點(diǎn)開始標(biāo)記所有被引用的對象。標(biāo)記的過程其實(shí)就是遍歷所有的GC Roots,然后將所有GC Roots可達(dá)的對象 標(biāo)記為存活的對象。
清除:遍歷整個堆,把未標(biāo)記的對象清除。
缺點(diǎn):此算法需要暫停整個應(yīng)用,會產(chǎn)生內(nèi)存碎片
用通俗的話解釋一下標(biāo)記/清除算法,就是當(dāng)程序運(yùn)行期間,若可以使用的內(nèi)存被耗盡的時候,GC線程就會被觸發(fā)并將程序暫停,隨后將依舊存活的對象標(biāo)記一遍,最終再將堆中所有沒被標(biāo)記的對象全部清除掉,接下來便讓程序恢復(fù)運(yùn)行。
- 劣勢
1、首先,它的缺點(diǎn)就是效率比較低(遞歸與全堆對象遍歷),而且在進(jìn)行GC的時候,需要停止應(yīng)用程序,這會導(dǎo)致用戶體驗非常差勁
2、其次,主要的缺點(diǎn)則是這種方式清理出來的空閑內(nèi)存是不連續(xù)的,這點(diǎn)不難理解,我們的死亡對象都是隨即的出現(xiàn)在內(nèi)存的各個角落的,現(xiàn)在把它們清除之后,內(nèi)存的布局自然會亂七八糟。而為了應(yīng)付這一點(diǎn),JVM就不得不維持一個內(nèi)存的空閑列表,這又是一種開銷。而且在分配數(shù)組對象的時候,尋找連續(xù)的內(nèi)存空間會不太好找。
總結(jié)
以上是生活随笔為你收集整理的马士兵JVM课程笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java canvas类画直线_canv
- 下一篇: 课上——HTML 表格 学生成绩表