java 及时释放内存_Java 内存释放
問(wèn)題一什么叫垃圾回收機(jī)制
垃圾回收是一種動(dòng)態(tài)存儲(chǔ)管理技術(shù)它自動(dòng)地釋放不再被程序引用的對(duì)象按照特定的垃圾收集算法來(lái)實(shí)現(xiàn)資源自動(dòng)回收的功能。當(dāng)一個(gè)對(duì)象不再被引用的時(shí)候內(nèi)存回收它占領(lǐng)的空間以便空間被后來(lái)的新對(duì)象使用以免造成內(nèi)存泄露。
問(wèn)題二java的垃圾回收有什么特點(diǎn)
JAVA語(yǔ)言不允許程序員直接控制內(nèi)存空間的使用。內(nèi)存空間的分配和回收都是由JRE負(fù)責(zé)在后臺(tái)自動(dòng)進(jìn)行的尤其是無(wú)用內(nèi)存空間的回收操作(garbagecollection,也稱(chēng)垃圾回收)只能由運(yùn)行環(huán)境提供的一個(gè)超級(jí)線程進(jìn)行監(jiān)測(cè)和控制。
問(wèn)題三垃圾回收器什么時(shí)候會(huì)運(yùn)行
一般是在CPU空閑或空間不足時(shí)自動(dòng)進(jìn)行垃圾回收而程序員無(wú)法精確控制垃圾回收的時(shí)機(jī)和順序等。
問(wèn)題四什么樣的對(duì)象符合垃圾回收條件
當(dāng)沒(méi)有任何獲得線程能訪問(wèn)一個(gè)對(duì)象時(shí)該對(duì)象就符合垃圾回收條件。
問(wèn)題五垃圾回收器是怎樣工作的
垃圾回收器如發(fā)現(xiàn)一個(gè)對(duì)象不能被任何活線程訪問(wèn)時(shí)他將認(rèn)為該對(duì)象符合刪除條件就將其加入回收隊(duì)列但不是立即銷(xiāo)毀對(duì)象何時(shí)銷(xiāo)毀并釋放內(nèi)存是無(wú)法預(yù)知的。垃圾回收不能強(qiáng)制執(zhí)行然而Java提供了一些方法如System.gc()方法允許你請(qǐng)求JVM執(zhí)行垃圾回收而不是要求虛擬機(jī)會(huì)盡其所能滿(mǎn)足請(qǐng)求但是不能保證JVM從內(nèi)存中刪除所有不用的對(duì)象。
問(wèn)題六一個(gè)java程序能夠耗盡內(nèi)存嗎
可以。垃圾收集系統(tǒng)嘗試在對(duì)象不被使用時(shí)把他們從內(nèi)存中刪除。然而如果保持太多活的對(duì)象系統(tǒng)則可能會(huì)耗盡內(nèi)存。垃圾回收器不能保證有足夠的內(nèi)存只能保證可用內(nèi)存盡可能的得到高效的管理。
問(wèn)題七如何顯示的使對(duì)象符合垃圾回收條件
1 空引用
當(dāng)對(duì)象沒(méi)有對(duì)他可到達(dá)引用時(shí)他就符合垃圾回收的條件。也就是說(shuō)如果沒(méi)有對(duì)他的引用刪除對(duì)象的引用就可以達(dá)到目的因此我們可以把引用變量設(shè)置為null來(lái)符合垃圾回收的條件。
StringBuffer sb = new StringBuffer("hello");
System.out.println(sb);
sb=null;
2 重新為引用變量賦值
可以通過(guò)設(shè)置引用變量引用另一個(gè)對(duì)象來(lái)解除該引用變量與一個(gè)對(duì)象間的引用關(guān)系。
StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2= new StringBuffer("goodbye");
System.out.println(sb1);
sb1=sb2;//此時(shí)"hello"符合回收條件
3 方法內(nèi)創(chuàng)建的對(duì)象
所創(chuàng)建的局部變量?jī)H在該方法的作用期間內(nèi)存在。一旦該方法返回在這個(gè)方法內(nèi)創(chuàng)建的對(duì)象就符合垃圾收集條件。有一種明顯的例外情況就是方法的返回對(duì)象。
public static voidmain(String[] args) {
Date d=getDate();
System.out.println("d = " +d);
}private staticDate getDate() {
Date d2= newDate();
StringBuffer now= newStringBuffer(d2.toString());
System.out.println(now);returnd2;
}
4 隔離引用
這種情況中被回收的對(duì)象仍具有引用這種情況稱(chēng)作隔離島。若存在這兩個(gè)實(shí)例他們互相引用并且這兩個(gè)對(duì)象的所有其他引用都刪除其他任何線程無(wú)法訪問(wèn)這兩個(gè)對(duì)象中的任意一個(gè)。也可以符合垃圾回收條件。
public classIsland {
Island i;public static voidmain(String[] args) {
Island i2= newIsland();
Island i3= newIsland();
Island i4= newIsland();
i2.i=i3;
i3.i=i4;
i4.i=i2;
i2=null;
i3=null;
i4=null;
}
}
問(wèn)題八垃圾收集前進(jìn)行清理 ------finalize()方法
java提供了一種機(jī)制使你能夠在對(duì)象剛要被垃圾回收之前運(yùn)行一些代碼。這段代碼位于名為finalize()的方法內(nèi)所有類(lèi)從Object類(lèi)繼承這個(gè)方法。由于不能保證垃圾回收器會(huì)刪除某個(gè)對(duì)象。因此放在finalize()中的代碼無(wú)法保證運(yùn)行。因此建議不要重寫(xiě)finalize();
總結(jié)
以上是生活随笔為你收集整理的java 及时释放内存_Java 内存释放的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 积分上下限无穷_数学方法的思考和存在无穷
- 下一篇: java servlet 输出_Java