前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 9 中的字符串(String)压缩的改进

Java 9 中的字符串(String)压缩的改进

原创
作者头像
HoneyMoose
修改2022-07-07 02:55:20
6360
修改2022-07-07 02:55:20
举报
文章被收录于专栏:CWIKIUSCWIKIUS

我们都知道 Strings 在 Java 中使用 char[] 数组来实现的。

images
images

每一个 char[] 数组中的元素将会使用 2 个字节(byte)的存储空间,这是因为 Java 最初的实现使用 UTF-16 字符集。

如果你不需要存储其他语言,你的语言只有英文,或者 ASCII 码就可以满足的情况下,Java String 使用的 char[] 数组中存储的字符元素还是会使用 UTF-16 字符集,那么就会导致存储一个字符的时候,我们使用了 2 字节,16 位。但是,因为我们又全是存储为16 位,那么存储的这个字符的前 8 位全部都会为 0。

因为 ASCII 使用单字节存储,这明显是一个存储空间的浪费。

实际上,很多字符存储都需要使用 2 字节,比如 UTF-8,比如 GBK,但是针对因为和 拉丁文 LATIN-1 使用 1 个字节的存储就够了,很显然这里有一个可以改进的空间。

在 JDK 9 之前,Java 不管什么字符都一股脑的使用 2 字节存储,在 JDK 9 以后,Java 对这里进行了改进。

同时我们知道 Java 是使用 String Pool 来存储的,String Pool 通常使用了 JVM 的 heap 内存空间,Heap 内存空间又是 JVM 垃圾清理程序活动的地方。

在老的设计中,String 占用了 2 个字节,但是很多时候可能用不到,如果我们对这里进行了改进的话,我们也能提高垃圾清理程序的工作量。

显然这个是需要重新考虑的问题。

在本页面中,我们将会讨论在 JDK 6 中使用的 Java String 的压缩选项和在 JDK 9 中使用的新的方法。

这 2 种方法主要目的就是为了降低 String 在 JVM 中内存消耗,提供空间利用率。

https://www.ossez.com/t/java-9-string/14024

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档