java的垃圾回收機制GC

一:java的垃圾回收機制,總題來說分2種:

一種引用計數算法,一種跟搜索算法。

引用計數的算法,有個bug:2個相互引用的對象,引用的計數一直是1,永遠不會被回收。

跟搜索算法:選定一些對象作爲跟對象,組成GC rootset的集合,從跟對象開始,查找所有的能關聯到的對象。

連接可達的對象,就是有引用的,不能回收。

連接不可達的對象,就是沒有被引用到的,就是需要被回收的對象。

 

二:這裏有2個問題點:

1、哪些對象可以用來做跟對象?

2、是不是  不可達的對象,就立即被回收了?

問題1回答:

1、虛擬機棧(棧幀中的本地變量表)中引用的對象。

2、 本地方法棧中JNI(即一般說的native方法)引用的對象。

3、 方法區中的靜態變量和常量引用的對象。

 

問題2回答:

java對象的生命週期:

1、創建階段:create

2、使用階段

3、不可見階段

4、不可達階段

5、執行finalize

6、被回收

 

三:GC在什麼時候執行?

GC機制將對內存分爲年輕代,老年代,持久代。

年輕代又分爲3部分:Eden,s_from,s_to。

新分配的對象都進入年輕代的Eden,特別大的對象,直接進老年代。

gc在2種情況是進行:

1、Eden滿了,minor gc;

2、老年代滿了,full gc。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章