在Java 8中,Java中的String由内部表示char[]。每个char存储在内存中的2个字节中。oracle的JDK开发人员分析了大量客户端的应用程序堆转储,他们注意到大多数字符串只能使用拉丁-1字符集表示。拉丁字符1可以存储在一个字节中,比char数据类型存储少50%(1个字节)。

因此,JDK开发者默认将String类内部存储设置为byte[]from char[]。这导致在堆内存中节省大量空间,因为通常,字符串对象占据堆内存的很大一部分。[ 来源 ]

您可以使用-XX:-CompactStrings参数java命令来控制应用程序中此功能的使用。

Java 9之前的字符串类(String)

在Java 9之前,字符串数据被存储为一个字符数组。这需要每个字符16位。

public final class String

implements java.io.Serializable, Comparable, CharSequence {

//The value is used for character storage.

private final char value[];

}

Java 9之后的字符串类(String)

从Java 9开始,字符串现在在内部使用字节数组以及用于编码引用的标志字段来表示。

public final class String

implements java.io.Serializable, Comparable, CharSequence {

/** The value is used for character storage. */

@Stable

private final byte[] value;

/**

* The identifier of the encoding used to encode the bytes in

* {@code value}. The supported values in this implementation are

*

* LATIN1

* UTF16

*

* @implNote This field is trusted by the VM, and is a subject to

* constant folding if String instance is constant. Overwriting this

* field after construction will cause problems.

*/

private final byte coder;

}

'java'命令参考

我们知道该java命令用于启动Java应用程序。它可以有许多参数来定制应用程序运行时。一个这样的命令如下:

-XX:-CompactStrings

禁用紧凑字符串功能。默认情况下,此选项已启用。启用此选项时,仅包含单字节字符的Java字符串将在内部表示,并使用ISO-8859-1 / Latin-1编码以单字节字符串的形式存储。这使得只包含单字节字符的字符串所需的空间量减少了50%。对于包含至少一个多字节字符的Java字符串:使用UTF-16编码将这些字符表示并存储为每个字符2个字节。禁用紧凑字符串功能强制使用UTF-16编码作为所有Java字符串的内部表示。

禁用紧凑字符串可能有益的情况包括:

当知道一个应用程序压倒多数将分配多字节字符串

在从Java SE 8迁移到Java SE 9时观察到性能回退的意外事件中,分析显示Compact Strings引入了回归

在这两种情况下,禁用紧凑字符串都是有道理的。

提示:这纯粹是一个实现变化,没有改变现有的公共接口。

java中String xx xx_Java 9 紧凑String改进[JEP 254]Java9新特性相关推荐

  1. Java中List和数组Array和String之间的相互转换

    Java中List和数组Array和String之间的相互转换 之前面试的时候遇到一个问题,先给大家分享一下.问:我想分别得到list,string和数组的长度,我能通过什么代码来得到? 这个问题先留 ...

  2. Java春招面试复习:JDK 5-15都有哪些经典新特性

    前言 JDK 15发布啦~ 我们一起回顾JDK 5-15 的新特性吧,大家一起学习哈~ 本文已经收录到github https://github.com/whx123/JavaHome 公众号:捡田螺 ...

  3. 【小家java】java9新特性(简述十大新特性) 褒贬不一

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  4. java中String xx xx_JAVA超级基础之String型字符串

    字符串 String类型(字符串类型==数据(char[])+操作(char[]中定义的方法)) 功能:字符串常量是系统能够显示的任何文字信息,必须包含在双引号("")之内. 1. ...

  5. Java中的 Switch 是如何支持 String 的?为什么不支持 long?

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 作者:jitwxs http ...

  6. Java中使用Jedis连接Redis对String进行操作的常用命令

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  7. Java中三种字符串的拼接(++ , String.format , StringBuilder.append)

    在Java中 , 对字符串内容的拼接是比较常见的操作 , 通常有三种方式 . 用String类重载'+'运算符进行拼接本质上是调用StringBuilder.append . 用类似C的printf风 ...

  8. java中boolean转string_Java boolean转String

    Java boolean转String 1 Java boolean转String的介绍 我们可以使用String.valueOf(boolean) 方法将boolean转换为Java中的String ...

  9. Java中Object转换为int类型或String类型

    一.判断Object的类型 下面是截取的一个判断Objec的类型,然后给Excel的单元格设置类型和添加值的操作: obj instanceof 类型 Object obj = entityMap.g ...

最新文章

  1. JavaScript 数据类型转换
  2. Echarts渲染选择SVG /canvas
  3. 轻量又高效,Apache Shiro 你值得拥有!
  4. 利用python爬取房价
  5. Maven: git-commit-id-plugin插件
  6. aspose word 转pdf中文乱码_pdf转word——都是乱码!怎么办
  7. 用这4种策略提高你的Facebook广告浏览量
  8. 30种应该知道的sql调优方法
  9. 102.如何减轻缓存失效时上游服务的压力
  10. Objective-C中的位运算符用法
  11. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——2.3 提取VCD、DVD视频中的音频...
  12. 麻了!35岁奥地利总理辞职当码农
  13. 洛谷P5322 [BJOI2019]排兵布阵【分组背包】
  14. Python OpenCV 写入视频
  15. 青柠起始页-浏览器起始页(一个简洁、美观、实用的浏览器起始页。)
  16. 2020最新版前端学习路线图--让前端学习变得美如画
  17. 标准 BT656 并行 数据结构 详解
  18. 【Python简单爬虫练习--Bilibili榜单】爬取+梳理B站排行榜页面
  19. CSDN英雄会上会英雄
  20. 完全用Python工作

热门文章

  1. 软件工程 团队博客分数 (第一阶段)
  2. Compressive sensing
  3. ASP.NET页面包含另外一个页面
  4. java 应用连接oracle 超级慢的解决方法
  5. listview 重复动画效果
  6. 截取指定网站Html编码
  7. vimdiff使用总结
  8. 联想重启乐檬?5G时代手机双品牌战略带来变局
  9. [C#泛型系列文章]
  10. Java常用监控工具