我聽說PermGC中存在字符串對象池,並且當字符串intern被執行時,它首先檢查該池是否存在等價的字符串對象,如果它不存在,它會創建一個並返回對池實例的引用。關於PermGC中的字符串對象池
但這是我的第一個問題。
我認爲這個對象是在堆上創建的,特別是在年輕一代中。如果它在少量垃圾收集期間存活下來,它就會轉移到老一代。任何人都可以解釋字符串對象如何進入Perm GC中存在的池中?
第二個問題:
String s =「test」; s =「test1」;
如果我將「test1」重新分配給引用s並繼續使用「test1」,這是否意味着「測試」(對年輕一代創建)將被垃圾收集?
第三個問題: 字符串對象池如何與運行時常量池相關?
謝謝。
你是說只有String s = new String(「test」);首先會在年輕一代上創建一個字符串對象? – user826323
@ user826323那麼,這將導致年輕一代的一個對象。然後,如果你調用'intern()',那麼如果沒有相應的字符串,那麼該實例's'要麼將被放入permgen池中,要麼**或**將返回先前的池實例,給你兩個引用。但是如果你在代碼中有'String s ='test';',那麼你會在池中有效地測試'',因爲它是一個源代碼文字。 –