
2016-11-11
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請說明出處。
今天重新看了Thinking in java中垃圾回收和終極處理原理。
[1]java中有負(fù)責(zé)回收無用對象占據(jù)內(nèi)存資源的垃圾回收器,但是垃圾回收器只知道釋放那些有new分配的內(nèi)存。而對于不是由new分配的內(nèi)存無法進(jìn)行釋放,java中允許在類中定義一個finalize()方法。
[2]finalize()方法的原理:
[2.1]垃圾回收器準(zhǔn)備釋放對象所占內(nèi)存
[2.2]先調(diào)用inalize()方法
[2.3]在下一次垃圾回收動作發(fā)生時,才會真正回收對象占用的內(nèi)存
[3]在java中,你需要明白一下幾點,才能更好的理解垃圾回收機制:
[3.1]對象可能不被垃圾回收處理
[3.2]垃圾回收不等于c++的析構(gòu)函數(shù)
[3.3]垃圾回收只與內(nèi)存有關(guān)
package cxy.first;
//終極處理和垃圾回收
//java有垃圾回收機制回收new分配的內(nèi)存,finalize()用于回收不是new分配的內(nèi)存
//[1]對象可能不被垃圾回收
//[2]垃圾回收不等于析構(gòu)函數(shù)
//[3]垃圾回收只與內(nèi)存有關(guān)
class Book{
boolean checkedOut=false;
Book(boolean checkOut){
checkedOut=checkOut;
}
void checkIn(){
checkedOut=false;
}
protected void fianlize(){
if(checkedOut)
System.out.println("Erro:checked out");
}
}
public class TerminationCondition {
public static void main(String[] args){
Book novel=new Book(true);
novel.checkIn();
new Book(true);
System.gc();
}
}