作者rebellian (nobody)
看板java
标题Re: [问题] JAVA String
时间Tue Jan 27 10:23:19 2009
我还是初学者 (暂时看不懂各位先进关於记忆体指令的讨论)
不过我记得之前问老师问题 他有提到
string literal 不会被 garbage collected
要用 new String ("type something here ") 产生的物件才会被GCed ?
原PO指令所显示的是 literal
呼叫GC会被回收吗 ??
还是我们老师只讲了一半 没讲完全部?
※ 引述《mgdesigner (魔法设计师)》之铭言:
: ※ 引述《sysc (和平时多准备)》之铭言:
: : 如果说我有一个String
: : String a = "xxx";
: ~~~~~~~~~~~~~~~~~
: 上面拆开来等於说:
: 1.产生一个新物件"xxx"
: 2.产生一参考 a,让a指向"xxx"
: : 现在当我这个a 想要改变值的时候
: : 现在我是这样写
: : a = "bbb";
: ~~~~~~~~~~~
: 这等於说:
: 1.产生一个新物件"bbb"
: 2.把a改指到"bbb"
: 但是"xxx"仍然存在喔,只是"xxx"目前没有被一个参考指到。
: : 但是 如果要对记忆体比较好一点的话 是否需要先用个方法把a 给clear 掉?
: 你应该是说把"xxx"给清掉吧?
: a=null;a= "bbb";这样?记得gc()一下,不过应该是没差很多。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 206.116.15.204
1F:推 jtmh:你们老师讲的是对的,因为就算 a 不再指到 "bbb", string 01/27 20:18
2F:→ jtmh:pool 里也还会有变数指向 "bbb", 所以 "bbb" 无法被 GCed. 01/27 20:20
3F:→ jtmh:不过我印象中好像有某种特殊情形下,"bbb" 还是会被 GCed, 但 01/27 20:22
4F:推 jtmh:细节我忘了 XDD 01/27 20:24