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

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

关注

评论

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

设计师用图形工作站哪种配置比较好?

青椒云云电脑

图形工作站

Meetup 回顾|Data Infra 研究社第十五期(含资料发布)

Databend

Python 安装与快速入门

小万哥

Python 程序员 软件 后端开发 Python3

明线与暗线:读懂云厂商鏖战大模型

脑极体

大模型

有史以来最香的日志收集平台是怎样练成的

Yestodorrow

可观测性用观测云

微服务回归单体,是技术架构倒退?我看未必!

雾岛听风(锋)

基于深度学习的语音合成技术的进展与未来趋势

数据堂

C++new和delete运算符介绍

芯动大师

Nautilus Chain 引入 $NAUT 通证,延续 $ZBC 的价值

BlockChain先知

什么是云电脑平台?有哪些知名的云电脑云平台

青椒云云电脑

云电脑 云电脑平台

Kafka的灵魂伴侣Logi-KafkaManger(5)之运维管控–平台管理(用户管理和平台配置)

石臻臻的杂货铺

kafka

Nautilus Chain 引入 $NAUT 通证,延续 $ZBC 的价值

股市老人

云电脑平台可以提供哪些服务?有什么优势

青椒云云电脑

云电脑 云电脑平台

Java进程CPU100%打满分析

落日楼台H

Java 性能优化 线程 cpu 100%

linux(ubuntu) 开启ssh root登录

圆弧

SSH 远程登录 root用户

英特尔以全栈式产品组合,驱动云服务和AI产业发展

E科讯

语音合成技术的简介与未来发展

数据堂

Tornado Cash 陷制裁风波,Unijoin.io 能否扛起隐私交易大旗?

股市老人

“存量竞争” 体验为王,火山引擎边缘云助力内容社区破局

火山引擎边缘云

CDN 边缘计算 加速 边缘云

ARTS-7

丁清

《操作系统实战 45 讲》笔记4——设备与文件系统

袁世超

操作系统 Cosmos LMOS

Kafka的灵魂伴侣Logi-KafkaManger(3)之运维管控--集群列表

石臻臻的杂货铺

kafka

论一个优秀的日志采集系统是如何设计和实现数据处理的

Yestodorrow

可观测性用观测云

Kafka灵魂伴侣Logi-KafkaManger(4)之运维管控–集群运维(数据迁移和集群)

石臻臻的杂货铺

kafka

新基建加码,私有云成传统基建升级首选

青椒云云电脑

桌面云 云桌面

语音合成技术的应用与挑战

数据堂

MySql数字保留两位小数

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

Nautilus Chain 引入 $NAUT 通证,延续 $ZBC 的价值

石头财经

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