String字符串性能优化的几种方案(16)


日志分析:没有使用intern情况下 , 执行时间为1515ms , 占用内存为16694k;

综上所述:使用intern情况下 , 内存相对没有使用intern的情况要小 , 但在节省内存的同时 , 增加了时间复杂度 。 我试过将MAX=10000000再增加一个0的情况下 , 使用intern将会花费高达11秒的执行时间 , 可见 , 在遍历数据过大时 , 不建议使用intern 。

因此 , 使用intern的前提 , 一定要考虑到具体的使用场景 。

到这里 , 可以确定 , 使用String.intern确实可以节省内存 。

接下来 , 分析一下intern在不同JDK版本的区别 。

在JDK1.6中 , 字符串常量池在方法区中 , 方法区属于永久代 。

在JDK1.7中 , 字符串常量池移到了堆中 。

在JDK1.8中 , 字符串常量池移到了元空间里 , 与堆相独立 。

分别在1.6、1.7、1.8版本执行以下一个例子:

推荐阅读