首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于 《Java 性能优化之 String 篇》 的疑义

2012-12-21 
关于 《Java 性能优化之 String 篇》 的疑问原文地址在:http://www.ibm.com/developerworks/cn/java/j-lo-op

关于 《Java 性能优化之 String 篇》 的疑问
原文地址在:
http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/?cmp=dwskl&cpb=dw&ct=dwcon&cr=cn_swb&ccy=cn

文中说:
仔细观察粗体这行代码我们发现 String.substring()所返回的 String 仍然会保存原始 String, 这就是 20,000 个平均长度的单词竟然占用了上百兆的内存的原因。 一个 csv 文件中每一行都是一份很长的数据,包含了上千的单词,最后被 String.split() 或 String.substring()截取出的每一个单词仍旧包含了其原先所在的上下文中,因而导致了出乎意料的大量的内存消耗。

我对这段话比较怀疑。

String 类中的这个构造函数:


运行结果如下:
maxMemory:66650112
totalMemory_01:2031616
totalMemory_02:39538688
totalMemory_03:40980480
ss[i]:0123456789012
totalMemory_03:40980480
ss[i]:1234567890123
totalMemory_03:40980480
ss[i]:2345678901234
totalMemory_03:40980480
ss[i]:3456789012345
totalMemory_03:40980480
ss[i]:4567890123456

很明显,substring 并不会引起内存消耗增大。

===========================

前几天想了一下,原文所说的占用内存,应该是 substring 导致原始数据的字符串里的 用到的char[] 对象无法释放(垃圾回收)引起的。

有空我再写个程序验证一下。唔唔,这个好象不太好写。

热点排行