2:無用對象是指它不能被程序中處於活動狀態的部分的引用。
3:垃圾收集處於低優先級的線程內,當可用內存較少時運行,但不能保證何時運行。
4:不可能強制運行垃圾回收線程,但是調用語句System.gc()有可能激活垃圾收集程序.
5:在垃圾回收機制中,無法保證對象被垃圾回收的順序,也無法保證 finalize() 方法被調用的順序。
6:環形引用關不能阻止對象被回收.例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class
A { B
b; } class
B { A
a; } |
執行下面的程序:
1
2
3
4
5
6
7
|
A a= new
A(); B b= new
B(); a.b=b; b.a=a; |
最後這二個對象都會被回收.
7:我們可以設置引用變量值爲null,來暗示垃圾收集線程來回收這引用變量的對象所佔用的內存。如果該對象屬於某監聽器對象,那麼,應該首先將這個監聽器註銷掉,否則該對象可能依然不能被垃圾回收。
8:所用對象都有一個finalize方法,他是從Object類繼承下來的,注意j2me中不可用.
9:什麼情況下垃圾回收線程會啓動?一般規則是:當存在無用對象時,將啓用垃圾收集線程,對無用對象佔用的內存進行釋放。什麼是無用對象?一般規則爲:沒有引用指向的對象稱爲無用對象.
10:垃圾回收線程的啓動時間由虛擬機內嵌算法來進行調度,程序員無法直接調度它,它的運行只有二種情況:系統在運行過程中處於空閒狀態和內存資源使用不足。
11:無用對象判斷方法補充:沿着對象的引用的被飽含關係追溯不到根對象或活動線程時,則這個對象被稱爲無用對象.
如下面所示,對象A、B、C、D、E不是無用對象,而G,H是無用對象.其中main代表根對象.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
main A C D B E G H |
12:垃圾回收線程管理的內存區域:在JAVA語言中,內存的分配與其他的語言也是一樣的,分爲代碼區、數據區、堆區、棧區,垃圾回收能夠管理的內存區域僅限於堆區.在類中聲明的靜態數據內存分配在數據區中,因此,靜態數據不會被垃圾回收線程回收.
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jsljn272/archive/2005/11/21/533677.aspx