大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

关注

评论

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

干货 | 工单系统与 ITSM 软件的区别是什么?

嘉为蓝鲸

运维 AIOPS 流程 ITSM 工单

笔记 | 关于SRE在金融行业落地的探讨

嘉为蓝鲸

运维 金融 SRE

中小微企业如何快速开发信息化系统

力软低代码开发平台

科创人·望繁信创始人索强:中国版流程挖掘注定有完全不同的活法

科创人

ElasticSearch 集群备份与恢复实践

移动云大数据

elasticsearch

EMQ携“云边一体化”IoT解决方案亮相第十届中国电子信息博览会

EMQ映云科技

物联网 IoT 云边一体 emq 8月月更

“似水无形” - 小程序化

FN0

小程序 容器化 轻应用

Apache Pulsar Tenant 和 Namespace 级别限速使用与实现

移动云大数据

pulsar

如何在OpenHarmony上使用SeetaFace2人脸识别库?

OpenHarmony开发者

OpenHarmony

无影云电脑

六月的雨在InfoQ

无影云电脑 云电脑 8月月更

学好前端开发技术的培训机构推荐

小谷哥

java编程技术学习好还是自学好

小谷哥

开源公开课丨大数据调度系统Taier任务调度介绍

袋鼠云数栈

SpringBoot 整合 MyBatis

mybatis springboot 8月月更

【真送礼物】1 分钟 Serverless 极速部署盲盒平台,自己部署自己抽!

阿里巴巴中间件

阿里云 Serverless 云原生

开源一夏 | Docker Compose从入门到实践

微枫Micromaple

开源 容器 云原生 8月月更

字节跳动基于ClickHouse优化实践之“多表关联查询”

字节跳动数据平台

数据库 数据分析 OLAP Clickhouse 数据查询

iofod - 借助低代码快速构建WeUI表单

独来独往

前端 低代码 表单 weui

他只是试图运用自己的能力,给这个领域带来改变

图灵教育

通信

如何选择适合自己的前端培训机构

小谷哥

前端程序员在培训学习中需要学习什么?

小谷哥

Spark Driver CPU 占用异常问题排查

观远数据

spark bug修复 #开源 8月月更

周一见!距离阿里巴巴开源开放周还有3天

阿里巴巴中间件

阿里云 开源

高项-第一章 信息化和信息系统(1)

索隆

项目管理 软考 笔记分享

“软件定义汽车”时代,车载生态安全运转需小程序化技术

Speedoooo

小程序 车联网 小程序容器 车载安全

内网场景 Dubbo 微服务接入观测云

观测云

Nginx + keepalived 实现高可用

C++后台开发

nginx 高可用 中间件 后端开发 C++开发

开源小白到核心开发——我与 sealer 的成长故事

阿里巴巴中间件

Docker 阿里云 容器 云原生 sealer

Ding!您有一份ChunJun实用指南,请查收

袋鼠云数栈

RT-Thread记录(十一、I/O 设备模型之UART设备 — 源码解析)

矜辰所致

RT-Thread 8月月更 IO设备模型

零基础学习java有必要参加吗?

小谷哥

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