写点什么

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:063498
用户头像

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

关注

评论

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

最佳加密货币钱包选择指南:企业级安全与功能全解析

qife122

加密货币 数字钱包

YashanDB数据库的监控与性能调优策略.

数据库砖家

YashanDB数据库的监控及维护策略与技巧

数据库砖家

并发丢数据深度剖析:JED的锁机制与事务实战踩坑及解决方案

京东零售技术

UModel 数据治理:运维世界模型构建实践

阿里巴巴云原生

阿里云 云原生 可观测

Nano Banana Pro发布,Google全家桶一统江湖

田威AI

YashanDB数据库的技术路线图与愿景展望.

数据库砖家

Dio包CRLF序列注入漏洞分析

qife122

网络安全漏洞分析

距离ChatGPT,千问还差几个“豆包”?

趣解商业

阿里巴巴 千问

Linksys HTTPd缓冲区溢出远程代码执行漏洞深度解析

qife122

网络安全 缓冲区溢出

掌控Apple Silicon MacBook电池健康的神器

qife122

macos Apple Silicon

Web3 区块链系统开发概述

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

ZTree基本使用及本人详解 使用案例2

刘大猫

人工智能 云计算 大数据 算法 物联网

西格电力面向行业用户的绿电直连架构适配技术与实践路径

西格电力

绿色能源 绿电直连 可再生能源发电 新型电力系统 能源结构

YashanDB数据库的集群架构设计原则与实践

数据库砖家

龙蜥操作系统装机量突破1000万,市占率近50%,首发支持RISC-V RVA23预览版!

OpenAnolis小助手

操作系统 龙蜥操作系统大会

如何借助ETL工具实现库存运营分析

谷云科技RestCloud

数据库 数据处理 数据传输 ETL 数据集成

【原理到实战】实验异质性分析

京东零售技术

估值 7 亿美元,Wispr 要做语音操作系统,还要自研 ASR;马斯克:实时视频理解和生成是未来丨日报

RTE开发者社区

搞笑诺贝尔:科学界的邪修盛宴

脑极体

AI

YashanDB数据库的监控工具与可视化分析

数据库砖家

2025骁龙AI大赛报名常见问题 FAQ

极市平台

nginx性能优化之tcp调优

天翼云开发者社区

CDN

被拖欠767万余元应退还土地出让金逾8个月 南京一家民企有疑惑,啥时候能拿到“救命钱”

科技大数据

Mozilla CI日志中暴露微软x-apikey的安全事件分析

qife122

网络安全 持续集成

区域CSIRT/LEA跨机构合作演习:网络安全实战演练与技术应用

qife122

网络安全 OSINT技术

虚拟电厂全景图:一张图解析聚合、通信与控制三大核心要素

西格电力

绿色能源 企业数字化转型发展双象限 绿色能源转型 虚拟电厂 虚拟电厂系统

YashanDB数据库的可扩展性与灵活性

数据库砖家

直播回顾 | 云原生消息队列架构破局:Pulsar存算分离深度解析

AscentStream

架构 消息队列 pulsar

YashanDB数据库的兼容性及跨平台应用潜力探讨

数据库砖家

YashanDB数据库的可扩展性关键技术研究

数据库砖家

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