深入理解 Java String#intern 内存模型.docx

深入理解 Java String#intern 内存模型.docx

ID:59602992

大小:73.72 KB

页数:3页

时间:2020-11-14

深入理解 Java String#intern 内存模型.docx_第1页
深入理解 Java String#intern 内存模型.docx_第2页
深入理解 Java String#intern 内存模型.docx_第3页
资源描述:

《深入理解 Java String#intern 内存模型.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、深入理解JavaString#intern()内存模型字符串常量池是一个固定大小的HashMap,桶的数量默认是1009,从Java7u40开始,该默认值增大到60013。在Java6当中,字符串常量池是放在Perm空间的,从Java7开始,字符串常量池被移到Heap空间。下面,我们通过测试程序来窥探字符串常量池在Java6,Java7两个不同版本底下的内存分配情况。测试程序public class StringPoolTest {      public void testStringPoolWithLongString(){         long i=0;       

2、  while(true){             String longString = "This is a very long string, very very long string to test the gc behavior of the string constant pool"+i;             longString.intern();             i++;         }     }      public static void main(String[] args){         StringPoolTest stri

3、ngPoolTest = new StringPoolTest();         stringPoolTest.testStringPoolWithLongString();     } } 测试程序很简单,一个死循环,循环里面通过递增变量i制造唯一的字符串,然后用main函数启动程序。Java6我们使用版本Jdk1.6.0_29来跑该程序,打开JavaVisualVM监控,可以看到,Perm区不断发生GC,由此的出结论,虽然字符串常量池放在Perm空间,但当Perm空间接近满的时候,JVM会将字符串常量池中的无用字符串回收掉。Java7下面,我们切换到Jdk1.7.0_6

4、7重跑该程序,可以看到Perm区内存分配曲线很平滑,没有出现内存分配的现象。但在Heap空间,新的对象不断产生,然后不断触发GC结论由于Perm区大小是有限的,通常只有几十MB,所以不推荐在Java6下广泛使用String.intern(),这篇文章string-intern-in-java-6-7-8的性能测试表明,在Java6底下大量使用intern()会导致应用性能的显著下降,还有可能产生OOM错误。但从Java7开始,字符串常量池被移到了Heap空间,Heap空间的大小只受制于机器的真实内存大小,因此,在Java7下使用String.intern()能更有效地减少重复S

5、tring对象对内存的占用。【编辑推荐】我是如何理解Java抽象类和接口的JAVA工程师有前途吗?经典个人职业规划Java程序员2015要考虑的5件事Java初学者必知关于Java字符串问题Java专业人员必备工具优缺点解析中文版

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。