推 zeat:aStr += "qwert"+randomStr;...挫賽...我常常這樣寫(囧 02/06 23:35
※ 引述《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