JAVA垃圾回收的几点知识
生活随笔
收集整理的這篇文章主要介紹了
JAVA垃圾回收的几点知识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JAVA垃圾回收的幾點知識
GC Root對象
因為java垃圾回收機制都是采用可達性分析法,所以需要有根對象來作為起始點,下面是可以作為GC Root的對象:
1.虛擬機棧(棧幀中的本地變量表)中引用的對象
2.方法區中的類靜態變量引用的對象
3.常量池中對象。(方法區中)
4.本地方法棧中JNI(即一般說的Native方法)中引用的對象
新生代GC(Minor GC)
采用復制算法,把eden區和survivor 0(s0,from)區的對象復制到S1區(to),然后清空eden區和s0區,調換s0和s1位置,對象年齡+1。如果to區又到達老年代標準的,需要移動到老年代。
老年代GC(Major GC)
采用標記清除算法,首先掃描一遍老年代,標記出存活的對象,然后回收無用對象。老年代裝不下時會OOM。
如何新生代對象被老年代對象引用的時候不被gc
當老年代存活對象多時,每次minor gc查詢老年代所有對象影響gc效率(因為gc stop-the-world),所以在老年代有一個write barrier(寫屏障)來管理的card table(卡表),card table存放了所有老年代對象對新生代對象的引用。
所以每次minor gc通過查詢card table來避免查詢整個老年代,以此來提高gc性能。
總結
以上是生活随笔為你收集整理的JAVA垃圾回收的几点知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git中统计代码提交数
- 下一篇: ThreadLocal 变量和 与线程池