考慮下面的Java類:Java可以檢測何時可以顯式釋放對象?
class Main
{
private static Integer AddOne(Integer i) {
return i + 1;
}
public static void main(String[] args)
{
Integer one = new Integer(1);
System.out.println(AddOne(one));
}
}
在這個簡單的例子,很容易看到該對象提到了one
從不調用AddOne
後再次引用。在main
退出後的一段時間將收集垃圾。然而,將內存放在內存中直到它被收購是一種浪費 - 對於Integer
來說可能不是那麼多,但是如果我有大量的數據結構(或其中的許多),則可能會影響性能。
在我看來,編譯器可以檢查上面的代碼,並看到不可能引用one
來跳過Main
類。然後,它可以明確地在main
函數的末尾釋放/完成參考。
這樣的設施是否存在於任何Java實現中?如果沒有,那麼這種機制不起作用的原因是否有技術上的原因?
注意參考變量走出去的範圍是不一樣的東西被引用的對象是供GC。在變量的生命期間,可能已經創建了對該對象的其他引用。 – 2014-10-07 04:04:04
@TedHopp感謝您指出的區別;不同的規則絕對適用於「一」和「對象」以前稱爲「一」。 – dimo414 2014-10-07 04:30:09