2013-12-18 63 views
4

從Java 7 interned字符串不再存儲在permgen區域。而是將它們存儲在正常的堆空間中,這意味着它們必須經歷一半GC和完整GC。現在,一半的GC中,那些生存的字符串必須從年輕人轉移到老一代。字符串池是否存在於年輕一代和老一代?

  • 這是否意味着年輕一代和老一代都有這種絃樂調查?

接下來讓我們說一個字符串interned。他們定義了一個具有相同內容的字符串文字,在這種情況下,它必須指向池中的相同字符串innstance。

  • 所以JVM在年輕和老一代 到檢索算法的字符串,返回參考選擇恰當的字符串實例。我的 是否正確?

回答

2

你正在混淆實際表格的邏輯佈局與其在內存中的物理排列。實習生表只是一個哈希表,在邏輯上(儘管不是物理上)與HashMap類似。當實習一個字符串時,JVM對它進行散列,然後查找適當的存儲區並返回它找到的字符串或將新的字符串添加到存儲區。

這與垃圾收集器的世代管理是正交的。事實上,一些收藏家擁有兩代以上的人物,並且G1 (pronounced "garbage first") collector可以使用多個地區作爲新舊物品。查找字符串時,JVM只是執行散列表查找,並遵循一些引用/指針,而不是像您所建議的那樣在每個代/區域中進行單獨搜索。

相關問題