2014-12-03 26 views
0

引用this頁:實習常量是否符合GC要求?

多少對象將有資格獲得GC這裏?

String s = "hello"; 
Character ch1 = 1; 
Character ch2 = 1; 
ch1 = null; 
s = null; 

我相信答案是1

我想了解它是如何工作在Java中6

我當時的理解:

字符串是要游泳池。後來,沒有提到它。所以,根據this的回答(我不明白那個關於classloader的部分,你能澄清一下嗎?),字符串池很可能不會被垃圾收集...

好的,字符。在Java中有this優化,將導致ch1ch2將指向相同的對象。所以,這個小角色也會去一些游泳池。但是,儘管ch1null,我們仍然可以通過ch2參考1

所以,我此刻的答案是0

我是在每一步吧?如果沒有,請糾正我。你能否提供一個解釋它是如何工作的?

回答

3

你的答案「沒有收集到」是正確的,至少只要定義字符串的類在四周。

"hello"是一個字符串文字,它出現在引用它的類中。只要班級可以到達,文字就會保持不變。

一個類也可以GC'd。但是每個類引用它的類加載器並被它引用。通常,你不關心類加載器,因爲你使用默認類,它(和所有的類)一直保持到最後。

某些應用程序(例如Web服務器)需要能夠動態地加載和卸載一些代碼(例如,servlet)。這就是類加載器被使用的地方。