作者zanyking (遥远的旅人)
看板java
标题Re: [问题] JAVA String
时间Sat Jan 31 11:55:28 2009
※ 引述《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
1F:推 zeat:aStr += "qwert"+randomStr;...挫赛...我常常这样写(囧 02/06 23:35