首页 新闻 会员 周边 捐助

String的驻留池内存如果管理

0
悬赏园豆:40 [已解决问题] 解决于 2016-03-21 11:50

String和StringBuilder不一样,String有自己独有的恒定性和驻留性,他不受GC管理,那如何释放他的内存的?如果不释放,那岂不是一直变大,最后变得非常大?

ismallboy的主页 ismallboy | 初学一级 | 园豆:166
提问于:2016-03-04 11:28
< >
分享
最佳答案
1

并非所有string都是interned string,大多数非interned string有着跟其他引用类型同样的GC规则。对于interned string,确实不受GC管理,而且据我所知也没有办法“手动GC”它们。这就是它的机制,在程序员intern一个string之前,应当知道这个机制带来的后果,人要对自己做的事情负责不是吗?

收获园豆:18
水牛刀刀 | 大侠五级 |园豆:6350 | 2016-03-04 11:49
其他回答(2)
0

Bigger than bigger, 苹果这广告就是在讽刺微软的。

你这么担心这个问题,建议投个简历给微软,看看能不能帮我们解决了这问题。

收获园豆:2
爱编程的大叔 | 园豆:30844 (高人七级) | 2016-03-04 11:32

 哈哈~~没实力进微软,口语都说不好。没道理啊,既然GC不会自动回收“Intern Pool”的内存,那至少会有手动回收内存的方法啊?!

支持(0) 反对(0) ismallboy | 园豆:166 (初学一级) | 2016-03-04 11:39

 而且Java也存在这个问题啊,那java是怎么解决的呢?

支持(0) 反对(0) ismallboy | 园豆:166 (初学一级) | 2016-03-04 11:40
0

我的理解就是当内存到一定程度时,GC会回收的,当然,关键在于string的合理利用

最新文章,你可以看一下

http://www.cnblogs.com/anding/p/5240313.html

收获园豆:20
MrNice | 园豆:3468 (老鸟四级) | 2016-03-04 12:04

而且String.concat()这个函数跟“+”有什么区别?

支持(0) 反对(0) ismallboy | 园豆:166 (初学一级) | 2016-03-04 13:05

@ismallboy:你听说过“操作符重载”么?就是说可以在程序中把+号变成你想表达的意思。+ 其实和concat是一样的意思

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2016-03-04 17:09

@田麦成: 但是看到一些资料说,少量的字符串连接使用concat(),多的话则使用stringbuilder?

支持(0) 反对(0) ismallboy | 园豆:166 (初学一级) | 2016-03-08 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册