了解有关JDK9紧凑弦乐的信息(视频回顾Charlie Hunt)

JDK 9引入了一个称为紧凑字符串的新功能。 鉴于Java程序中普遍存在字符串,我认为这是一个非常重要的更改,所有Java开发人员都必须理解。

在此视频中,查理·亨特(Charlie Hunt)解释了此新功能的历史和实现。 该视频实际上与紧凑字符串无关。 仅将紧凑型字符串作为案例研究来介绍,以说明如何通过大量工作来共同改善三腿工作,延迟,吞吐量和内存占用。

如果您有时间,我绝对建议您观看整个视频,尽管紧凑弦乐的实际部分始于26:24。

如果您需要5分钟的概览,请看以下要点:

  • 字符串密度(JEP 254紧凑字符串)是JDK 9的功能。
  • 目的是在不影响性能(延迟或吞吐量)的同时减少内存占用,并保持完全的向后兼容性。
  • JDK 6引入了压缩字符串,但是从未将其引入以后的JVM中。 这是一个完整的重写。
  • 为了确定可以节省多少内存,分析了960个不同的Java应用程序堆转储。
  • 堆转储的实时数据大小在300MB到2.5GB之间。
  • char []消耗了实时数据的10%至45%
  • 绝大多数字符的大小仅为一位(即ASCII)
  • 75%的字符数组不超过35个字符
  • 平均而言,应用程序大小的减少为5-15%(由于标题大小,char []大小减少了约35-45%)
  • 它的实现方式是,如果String中的所有字符仅使用1个字节(较高的字节为0),则将使用byte []而不是char [](IS0-8859-1 / Latin1编码)。 会有一个再见指示使用哪种编码。
  • 未使用UTF8,因为它支持可变长度的字符,因此对于随机访问不起作用。
  • 字符串上的private final byte coder指示编码。 请注意,将来有空间支持更多编码。
  • 对于所有64位JVM,由于8字节对象对齐需要'死'空间,因此不需要额外的字段来存储额外的字段。
  • 在线提供400个JMH基准测试,吞吐量不会受到影响。
  • 原因是String高度优化,因为仅String就有55种特定的JVM功能。
  • 使用行业基准SPECjbb2015进行的延迟测试也得到了改进,并且在SPECjbb2005上进行了回归测试
  • 可以使用-XX:+ CompactStrings启用和禁用该功能,但是默认情况下将启用它。

翻译自: https://www.javacodegeeks.com/2016/02/learn-jdk9-compact-strings-video-review-charlie-hunt.html

你可能感兴趣的:(了解有关JDK9紧凑弦乐的信息(视频回顾Charlie Hunt))