- JDK7的String重新设计。
确实,重新设计后,更加安全了,但某些情况下,会有很大的性能损失。
http://nextmovesoftware.com/blog/2013/07/05/java-6-vs-java-7-when-implementation-matters/
主要体现在substring,trim等;
原有设计可能存在内存泄露,我的博客http://lvdccyb.iteye.com/blog/1849542也讨论过
但是,新的设计引来的问题是:性能有所下降(参见上述引文)。
主要是,原来是通过共享char数组buffer实现,因此,实际上,即使substring(1),也会对整个string对象引用,从而可能造成内存泄露。现在采用的是copy该缓冲区,单独形成一个String对像,简单的说:
JDK7:
String a = "abc".substring(1);
该语句完全等价于 JDK6的:
String a =new String("abc".substring(1));
JDK6中为了避免内存泄露,也是通过上述new String来实现的。
因此,从算法上,原有的是O(1),现在是O(N) ,即要copy N个char,如果N很大,且substring调用很频繁,可能会有性能问题。
如果性能确实至关关重要,修改方式:
(1)不使用substring,而是直接引用char数组
(2)新建一个代理类String,使用jdk6的实现方式代理新的String.
对于原有jdk6代码中,使用了 new String(line.substtring(XXX,YYY))方式的代码,影响其实并不大。
相关推荐
jdk-8u311-windows-x64
linux安装jdk(csdn)————程序
JDK下载软件的宅槽信息系统以及配置需求安装文件信息详情
JDK1.6——API文档完整版,一个非常不错的官方参考文档。
JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7...
JAVA JDK 压缩文件 可下载直接使用,具体配置JDK环节详细介绍
JDK——1.8的tools.jar 包,.
良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...
Nashorn与JDK8——动态语言在JVM上的高性能实现.pdf
jdk1.8版本,亲测可用
Java JDK 6学习笔记——ppt简体版
jdk7 jdk8 jdk9 jdk10 jdk11 jdk12 jdk13 jdk14 (win-64位) 资源共享
jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载jdk7j下载
Java JDK 6学习笔记——ppt简体版.rar
JDK 6.0安装手册——jdk,linux,aix,widow,Solarise.docx
centos配置JDK环境(csdn)————程序