《HarmonyOS:领航者说》技术公开课来啦,大咖分享、实战解码,不容错过 了解详情
写点什么

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

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

关注

评论

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

2025第三届中国SRE大会成功举办

雅菲奥朗

财会创新智启未来,2025年ACCA华南区年度峰会成功举办

财见

真正的生产力来了!Docker迁移部署两步搞定!

不在线第一只蜗牛

Java Docker 容器

SeaTunnel 社区 2 项目中选“开源之夏 2025”,探索高阶数据集成能力!

白鲸开源

数据库 大数据 开源 Apache SeaTunnel 开源之夏

白鲸开源双项目齐中选,助力“开源之夏 2025”再结硕果!

白鲸开源

开源 DataOps 开源之夏 白鲸开源

在 AWS 上重构数据中台,这家出海企业选择了数栈

袋鼠云数栈

大数据 数据中台 运维 数据治理 大数据产品

零代码打造专业级工业数字孪生

袋鼠云数栈

数字孪生 数据应用 数字孪生城市 易知微 3D场景

对话 Wispr Flow 创始人 Tanay:语音输入,如何创造极致的 Voice AI 产品体验

声网

一行代码性能翻倍?Rust开发者不可不知的“内存黑科技”!

Yeauty

rust malloc Wasm memory jemalloc

高并发系统的艺术:如何在流量洪峰中游刃有余

京东科技开发者

啥时候上RAG?啥时候上微调?丨实战笔记

阿星AI工作室

AI 产品经理 rag 微调

Academic Pages - 学术个人网站模板

qife

Jekyll 学术网站

“念念不忘,必有回响” 与 “着力即差”

酱紫的小白兔

【HarmonyOS】鸿蒙使用仓颉编程入门

GeorgeGcs

DolphinScheduler 6 个高频 SQL 操作技巧

白鲸开源

sql 大数据 开源 Apache DolphinScheduler 任务调度

SeaTunnel 社区月报(5-6 月):全新功能上线、Bug 大扫除、Merge 之星是谁?

白鲸开源

大数据 Clickhouse 数据集成 Apache SeaTunnel 版本发布

什么是低代码?低代码的技术发展、技术领域及对比纯代码的优劣势

优秀

低代码 低代码平台 低代码技术

【7 月 5 日北京】还有 4 天见面,为你整理大会现场还需要知道的事!

Apache IoTDB

我对 AI 写作的一些思考:Writing in the Age of LLMs

Baihai IDP

人工智能 AI Baihai IDP AI 写作

基于StarRocks的指标平台查询加速方案

袋鼠云数栈

数据库 运维 数据管理 指标管理 指标管理平台

系统整容纪:用知识来“武装“自己~认识MySQL的锁与事务

京东科技开发者

Meta 成立超级智能实验室,多名顶尖语音科学家加入;TEN VAD 开源 ONNX 模型,GitHub 破 700 星丨日报

声网

MySQL数据一键同步至ClickHouse数据库

RestCloud

MySQL 数据库 数据同步 ETL Click house

华为OceanProtect跻身Gartner®备份与数据保护平台魔力象限"挑战者"

财见

DolphinScheduler 社区喜讯:两项学生项目入选“开源之夏 2025”!

白鲸开源

大数据 开源 数据集成 Seatunnel 开源之夏

DolphinScheduler 社区月报(5-6 月):修复优化齐发力,贡献者高光时刻回顾!

白鲸开源

大数据 开源 Apache DolphinScheduler 贡献者 Apache基金会

数栈 × AWS EMR On EC2 适配实践:打造出海企业可落地的云上数据中台解决方案

袋鼠云数栈

大数据 数据治理 AWS 数据运营 数栈

DistillQwen-ThoughtY:通过变长思维链蒸馏,全面提升模型推理能力!

阿里云大数据AI技术

人工智能 数据分析 数据处理 模型应用 #大数据

国产数据库StarRocks在数栈轻量化数据开发的全流程实践

袋鼠云数栈

大数据 运维 数据治理 数据管理 数栈

HarmonyOS安全与隐私分论坛举行,全面展示星盾安全2.0生态创新实践

最新动态

用 AI 解锁技术调研的新姿势

京东科技开发者

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