`

再说jdk7的substring——从O(1)到O(N)

    博客分类:
  • java
阅读更多
  • 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))方式的代码,影响其实并不大。

分享到:
评论

相关推荐

    jdk1.8系列——8u311-windows-x64.zip

    1. **Lambda表达式**:JDK 1.8引入了Lambda表达式,这是一种简洁的函数式编程语法,使得编写匿名函数更加简单。通过这种方式,开发者可以使用更少的代码实现功能,提高代码可读性和效率。 2. **Stream API**:...

    JavaJDK@19——47198.exe

    JDK下载软件的宅槽信息系统以及配置需求安装文件信息详情

    jdk1.6.0——13.tagz

    标题“jdk1.6.0——13.tagz”揭示了这是一个与Java开发工具包(Java Development Kit)相关的文件,具体版本为1.6.0的第13次更新。Java JDK是用于编写、编译和调试Java应用程序的基础软件包。它包含了Java虚拟机...

    linux安装jdk(csdn)————程序.pdf

    Linux安装JDK指南 Linux安装JDK是开发者和系统管理员最常见的任务之一。...本文指导了读者如何在Linux系统上安装JDK,从解压缩JDK安装包到检测JDK安装的每一步骤。本文适合初学者和经验丰富的开发者和系统管理员。

    Java JDK1.8.0——101

    Java JDK 1.8.0_101是Oracle公司发布的Java Development Kit的一个版本,它包含了Java编程语言的运行环境和开发工具。这个版本对于Java开发者来说至关重要,因为它提供了编译、调试和运行Java应用程序所需的所有组件...

    jdk7-aarch64-uos.tar.gz

    2. 解压文件:使用tar命令解压jdk7-aarch64-uos.tar.gz到指定目录,例如`tar -zxvf jdk7-aarch64-uos.tar.gz -C /usr/local/`。 3. 设置环境变量:修改系统环境变量,将JDK的bin目录添加到PATH中,例如`echo "export...

    jdk7 jdk-7u80-linux-x64 网盘下载

    根据提供的网盘链接(https://pan.baidu.com/s/1DPMZe4OJN-tecBQ8jzGjtw,提取码:jnx8),可以下载到JDK 7 Update 80的Linux x64版本。这是一个适用于64位Linux操作系统的安装包。 ##### 4.2 解压JDK 7 Linux x64 ...

    jdk7api帮助文档

    此外,`String`类还新增了`isEmpty()`方法,用于判断字符串是否为空,以及`substring()`方法的改进,允许负数索引,表示从字符串末尾开始计数。 在文件系统操作上,JDK7引入了`java.nio.file`包,提供了一组新的API...

    jdk1.8(64位)安装包.zip

    1. **JDK 1.8新特性**: - **Lambda表达式**:这是JDK 1.8中最显著的特性,它引入了函数式编程的概念,允许开发者使用简洁的语法处理匿名函数。 - **方法引用和构造器引用**:与Lambda表达式配合,可以更直观地...

    jdk7jdk-7u65-windows-x64.rar

    这个压缩包“jdk7jdk-7u65-windows-x64.rar”包含了适用于64位Windows系统的Java Development Kit(JDK)的更新版本7u65。JDK是Java编程的基础,它提供了编译、调试和运行Java程序所需的所有工具和库。 Java JDK 7 ...

    jdk——64位官方下载

    从官方渠道下载JDK保证了获取的是未经篡改的、安全的、最新版本的软件,避免了潜在的安全风险和兼容性问题。官方版本还提供了持续的更新和补丁,确保开发者可以使用到最新的特性和修复。 **4. 安装与配置** 安装JDK...

    jdk1.8——Java开发环境(最常用)

    **JDK1.8——Java开发环境(最常用)** JDK(Java Development Kit)是Oracle公司提供的Java编程工具包,用于开发、编译、调试Java应用程序。JDK1.8,也称为Java 8,是Java历史上一个非常重要的版本,它的发布在...

    JDK——1.8的tools.jar 包

    JDK——1.8的tools.jar 包,.

    良葛格————JavaJDK5.0学习笔记PDF

    良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...

    jdk7(jdk压缩包,不是exe执行文件——打开直接就可以用).zip

    这个压缩包“jdk7(jdk压缩包,不是exe执行文件——打开直接就可以用).zip”包含了JDK 7版本,而不是通常的.exe安装程序。因此,用户需要手动进行解压和环境变量配置才能使用。 首先,我们需要对压缩包进行解压。...

    JDK7源码(JDK7u7_src.zip)

    3. switch语句支持字符串:在JDK7之前,switch只能用于常量和枚举,JDK7将其扩展到支持字符串,提高了代码的可读性和灵活性。 4. 多 catch 块:允许在一个catch块中捕获多种异常,简化了异常处理代码。 5. 文件...

    jdk-7u80-windows-x64.exe 【官方下载的jdk1.7、jdk7,windows 64位版】

    1. **多语言支持**:Java 7增加了对其他编程语言的支持,如Groovy、Scala等,通过JEP(JDK Enhancement Proposals)292,使得这些语言可以在Java虚拟机(JVM)上运行。 2. **try-with-resources**:这是一个语法糖...

    精通JAVA——JDK(高清PDF文件)

    《精通JAVA——JDK》是一本深度探讨Java编程语言及其开发工具集JDK的专业教程,旨在帮助Java开发者提升技能,实现技术的精进。作为Java的基石,JDK(Java Development Kit)是学习和开发Java应用程序必不可少的工具...

    Java JDK 7学习笔记 PDF

    1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过`<>`语法糖使得创建泛型实例更为简洁,例如`List<String> list = new ArrayList();` 2. **钻石操作符**:在创建带...

    Java JDK 6学习笔记——ppt简体版.rar

    通过"Java JDK 6学习笔记——ppt简体版",学习者可以系统地学习到如何使用JDK 6进行开发,包括环境配置、基本语法、类库使用、异常处理、IO流、网络编程、多线程等各个方面。PPT格式通常直观易懂,便于快速理解和...

Global site tag (gtag.js) - Google Analytics