太卷了,这份Java性能调优手册仅上线1小时,竟被恶意封杀下架

news/2024/11/17 7:36:04/

在各大厂的面试中,性能优化的问题肯定不会缺席,这足以说明其重要性。今天给大家带来的便是由资深程序员葛一鸣老师写的《Java程序性能优化实战》,同样是没有开源版本,我会将领取方式放在文末

Java程序性能优化实战

我看过几篇讲解Java程序性能优化的图书,要么是内容不够深入,要么是过于晦涩难懂,不够浅显,而这本书却让我眼前一亮,很多困扰我的问题都能在书中找到答案。它涵盖了各种程序员所需的性能优化知识点,是Java开发者提升水平的必读佳作

来看看目录内容,里面一定有你想看的

​亮个相吧(狗头.jpg)

想要更进一步的Java开发者一定不能错过!记得关注公众号:Java收藏夹,即可获取免费领取方式,先到先得

substring()方法的内存泄漏

截取子字符串是字符串操作中最常用的操作之一。在Java中,String类提供了以下两个截取子字符串的方法:
public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)
以第2个方法为例,它返回原字符串中以beginIndex开始,到 endIndex为止的子字符串。然而,这个方法在JDK的实现中存在严重的 内存泄漏问题。此方法的源代码(Java 6代码)如下:
public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > count) {
throw new StringIndexOutOfBoundsException(endIndex);
}
if (beginIndex > endIndex) {
throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
}
return ((beginIndex == 0) && (endIndex == count)) ? this :
new String(offset + beginIndex, endIndex - beginIndex, value);
}

在方法的最后返回了一个新建的String对象。该String的构造函数如 下:

// 包内可见的构造器,通过共享数组内容加速访问
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
在源码的注释中说明这是一个包作用域的构造函数,其目的是为了能高效且快速地共享String内的char数组对象。但在这种通过偏移量来截 取字符串的方法中,String的原生内容value数组被复制到新的子字符串 中。
设想,如果原始字符串很长,截取的字符串长度却很短,那么截取 的子字符串中包含原生字符串的所有内容,并占据了相应的内存空间,而仅通过偏移量和长度来决定自己的实际取值。因此这种算法提高了运 算速度却浪费了大量的内存空间


http://www.ppmy.cn/news/2.html

相关文章

分享五款没什么名气却意外好用的软件

噔噔噔噔&#xff0c;作为一个黑科技软件爱好者&#xff0c;电脑里肯定是不会缺少这方面的东西&#xff0c;今天的5款优质软件闪亮登场了。 1.密码管理工具——RoboForm 这是一款密码管理的小插件&#xff0c;相信很多人都曾被各种各样的密码记忆弄得心力交瘁过&#xff0c;尤…