50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Oracle 优化 Java 字符串内部表示

  • 2013-12-24
  • 本文字数:688 字

    阅读完需:约 2 分钟

为了不断改善 Java 性能,Oracle 已经宣布自 Java 1.7.0_06 开始更改 String 类中的字符串内部表示。

此次更改删除了 String 底层实现中的两个非静态字段,这样做有助于防止内存泄漏。

原来的 String 实现基于四个非静态字段。第一个是 char[] 值,它包含组成 String 的字符。第二个是 int offset,它保存值数组中第一个字符的索引。第三个是 int count,它保存用到的字符数。第四个是 int hash,它保存 String 哈希码的缓存值。

Oracle 报告称,当调用 String.substring()创建 String 时,原来的实现会产生性能问题。许多其它 API,如 Pattern.split(),都会在内部调用 substring()。当 String.substring()被调用时,它会引用原来的包含组成 String 的字符的内部 char[]。

原先的实现之所以采用这种设计方式是为了节省内存,因为子串仍然会引用原来的字符数据。除此之外,String.substring()的运行时间是一个常量(O(1)),而不像新的实现那样,有一个线性(O(n))运行时间。

不过,如果应用程序从原来的长字符串中抽取一个短字符串,并随后丢弃原来的字符串,那么在这种情况下可能会产生内存泄漏。在这个场景中,仍然存在一个活引用,指向原来字符串底层那个原来较大的 char[] 值,这可能会占据许多不再使用的数据字节。

在早期版本中,Oracle 建议在短字符串上调用 new String(String)构造函数来避免这种情况。那个 API 只复制所需的底层 char[] 的一部分,从而解除新的较短的字符串与原来的较长的父字符串的关联。

新规范删除了 String 的 offset 和 count 字段,因此子串不再共享底层的 char[] 值。

查看英文原文: Oracle Tunes Java’s Internal String Representation

2013-12-24 06:063430
用户头像

发布了 256 篇内容, 共 99.3 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

直播程式源码平台细讲HTTP协议:超文本传输

山东布谷科技

软件开发 HTTP 数据传输 直播程式源码 超文本传输协议

NFT 数据基础设施 NFTScan 为万向区块链周黑客松开发者提供多链 NFT API 数据支持!

NFT Research

HarmonyOS扫码服务,应用服务一扫直达打造系统级流量新入口

HarmonyOS SDK

HarmonyOS HMS Core

Microsoft Remote Desktop for Mac 远程连接工具推荐

胖墩儿不胖y

远程连接 微软远程桌面连接工具 Mac软件推荐 远程连接工具

HarmonyOS—UI开发性能提升的推荐方法

HarmonyOS开发者

HarmonyOS

数智融合 升级底座,用友iuap助力大型企业驾驭数智未来

用友BIP

数智化底座 2023全球商业创新大会

HarmonyOS—使用Web组件加载页面

HarmonyOS开发者

HarmonyOS

企服大模型,加速AI场景落地

用友BIP

YonGPT 企服大模型

火山引擎ByteHouse:ClickHouse如何保证海量数据一致性

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 8 月 PK 榜

Java和Lua的完美结合:实现Java程序的动态扩展和脚本自动升级

java易二三

Java lua 编程 程序员 计算机

开放同飞,华为云发布盘古大模型全域协同生态

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜 华为云盘古大模型

谭中意 | 百模大战方酣,AI 开源亮剑

开源雨林

人工智能 开源 开放原子开源基金会 多模态

对线面试官 - MySQL隔离级别 、锁机制

派大星

MySQL Java 面试题

祝贺!Databend Cloud 和阿里云 PolarDB 达成认证

Databend

存储方案作为产品——Midgard探索

百度Geek说

数据治理 数据编排 储存 企业号 8 月 PK 榜

百度文心一率先言向全社会开放 应用商店搜“文心一言”可直接下载

飞桨PaddlePaddle

人工智能 文心一言

Java单元测试及常用语句

java易二三

Java 编程 程序员 计算机

Oracle优化Java字符串内部表示_Java_Kaushik Pal_InfoQ精选文章