写点什么

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

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

关注

评论

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

Vue进阶(二十): 请求方式详解

No Silver Bullet

ajax Vue axios 8月日更 请求方式

一文看懂低代码的现状、打法、机会和挑战

小博

中台 云原生 PaaS SaaS/IaaS/PaaS 低代码开发平台

php 精度问题

一个大红包

8月日更

JavaScript中的 async 和 await

devpoint

Promise Async await 8月日更

关于区块链的学习笔记(二)

姬翔

【设计模式】外观模式

Andy阿辉

C# 后端 设计模式 8月日更

ipfs存储服务器的优势在哪里?ipfs怎么挖矿?

IPFS怎么挖矿 ipfs存储服务器的优势

生产环境全链路压测-影子库落地

国隆

“善于治”和“以善治”:华为云Stack在智慧城市的十年踪迹十年心

脑极体

【架构实战营】毕业总结

Geek_2e7dd7

Serverless与WebSocket的聊天工具

刘宇

Serverless websocket

Activiti工作流---简单开发平台,请假实例演示

金陵老街

Java SpringBoot 2 Vue 3 Activiti

到底该怎么定义 To B SaaS 产品

姜雨生

SaaS 标准化 To B业务 行业深度

绝绝子!腾讯大牛1909页的leetcode刷题笔记,细节满满

Java 编程 架构 面试 程序人生

如何改进新员工的入职体验?

石云升

用户体验 入职 体验设计 8月日更

Golang 实现 RTP

RTE开发者社区

音视频 rtp

波宝TronLink钱包模式系统开发|波宝钱包模式功能介绍

量化系统19942438797

碳中和将为中国带来什么? 绿色转型如何驱动经济跃升?

CECBC

网络安全界基于知识的识别和映射提出网络空间资源分类明细

郑州埃文科技

极光开发者周刊【No.0806】

极光GPTBots-极光推送

关于区块链的学习笔记(三)

姬翔

架构训练营 - 模块三 - 作业

姑射仙人

#架构实战营

全国有待形成数据资产市场 区块链、人工智能或成重要支撑技术

CECBC

区块链DAPP钱包开发|波场DAPP开发钱包

Geek_23f0c3

区块链 DAPP智能合约交易系统开发 波场DAPP

毕业总结

Presley

未来的价值互联网主要建立在NFT上

CECBC

你知道Kafka创建Topic这个过程做了哪些事情吗?(附视频)

石臻臻的杂货铺

大数据 kafka 源码 运维

关于区块链技术的学习笔记(一)

姬翔

网络攻防学习笔记 Day100

穿过生命散发芬芳

态势感知 网络攻防 8月日更

为什么宁可提拔一个新同事当领导,也不提我这个来十年的老员工呢?

非著名程序员

认知提升 个人提升 职场成长 8月日更

番外4. Python OpenCV 中鼠标事件相关处理与常见问题解决方案

梦想橡皮擦

8月日更

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