看板 java 關於我們 聯絡資訊
※ 引述《rebellian (nobody)》之銘言: : 我還是初學者 (暫時看不懂各位先進關於記憶體指令的討論) : 不過我記得之前問老師問題 他有提到 : string literal 不會被 garbage collected : 要用 new String ("type something here ") 產生的物件才會被GCed ? : 原PO指令所顯示的是 literal : 呼叫GC會被回收嗎 ?? : 還是我們老師只講了一半 沒講完全部? 我推測,至少,在JVM 已經到了向OS可索取的記憶體已達最大上限時, String pool 裡已經沒有其他外部ref的string 應該會開始GC吧? JVM作String pool管理上的策略,其實是有很多因素可以考慮的。 String Pool 對一個String 紀錄的資訊越多、資料結構越複雜, 作GC的選擇就越準(「常用」的String 越不會被GC掉。) 但相對的創建與使用的overhead就會增大,使用的記憶體會增加,程式運作 效率會變差。 但管理策略太簡單的VM要是對上了Developer喜歡寫: for(... ; ... ;...) aStr += "qwert"+randomStr; 這種鬼東西時,工作起來就辛苦了。 個人感覺是,這種策略的,沒有對錯、就是預測的東西,越簡單越好。 執行結果正確最重要,遇上糟糕的Code,能用Byte code 優化處理掉的就 處理,不能的就讓開發者自己去想辦法吧。 -- 小時候總踢過毽子吧? 那就該知道蛋糕總是奶油的那面著地,不是因為你倒楣,而是因為海綿比奶油蓬鬆。 『你知道人有腦子,所以不要只是單純的滿足它,偶爾也要使用它啊。』 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.104.134.18
zeat:aStr += "qwert"+randomStr;...挫賽...我常常這樣寫(囧 02/06 23:35