java 代码解读复制代码publicclassCompactStringExample{publicstaticvoidmain(String[]args){String latinString="Hello";// 仅包含Latin-1字符String utf16String="你好";// 包含UTF-16字符// 打印每个字符串的内部字节数组长度System.out.println("Latin String Length: "+latinString.getBytes().length);// 输出...
简介:Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。 在Java 9中引入了紧凑字符串(Compact Strings)特性,用来优化字符串的内存使用。简单来说,Java改进了字符串的存储方式,将之前的UTF-16字符...
什么是java的Compact Strings特性,什么情况下使用 在Java 9中引入了紧凑字符串(Compact Strings)特性,用来优化字符串的内存使用。简单来说,Java改进了字符串的存储方式,将之前的UTF-16字符数组改为字节数组,使得字符串能根据内容使用更节省内存的编码方式。以下是这个特性的核心内容: 什么是紧凑字符串 内部结构: 在Jav...
-XX:-CompactStrings Disables the Compact Strings feature. By default, this option is enabled. When this option is enabled, Java Strings containing only single-byte characters are internally represented and stored as single-byte-per-character Strings using ISO-8859-1 / Latin-1 encoding. This reduc...
-XX:+CompactStrings 在Java 命令行启动时,可以通过使用-XX:+CompactStrings参数来开启 Compact Strings。该参数告诉 Java 虚拟机在启动时启用紧凑字符串(Compact Strings)优化。 以下是使用 Java 命令行启动并开启 Compact Strings 的示例: java -XX:+CompactStrings -jar YourJarFile.jar ...
让我们通过下面的一个简单的测试来看看启用缩小字符串( Compact String)配置和不启用这个配置对性能产生的异同。 代码语言:javascript 复制 long startTime=System.currentTimeMillis();List strings=IntStream.rangeClosed(1,10_000_000).mapToObj(Integer::toString).collect(toList());long totalTime=System.curren...
}privatebooleanisLatin1(){returnCOMPACT_STRINGS && coder == LATIN1; } CompactString在 JVM 中是默认启用的,如果你不想启用,你可以使用下面的参数告诉 JVM 不使用 String 压缩功能: +XX:-CompactStrings coder 是如何工作的 在Java 9 的String类实现中,有关字符串的长度是下面的方法来进行计算的: ...
同样的,我们禁用 JVM 的这个参数-XX:-CompactStrings参数选项再来看看输出: Generated10000000strings in936ms. Created stringoflength488895in9727ms. 通过上面的代码,我们可以看到上面 2 个参数修改后对比的输出并不是非常的明显,但是也可以看到有明确的性能提升。
让我们通过下面的一个简单的测试来看看启用缩小字符串( Compact String)配置和不启用这个配置对性能产生的异同。 long startTime = System.currentTimeMillis(); List strings = IntStream.rangeClosed(1,10_000_000) .mapToObj(Integer::toString) .collect(toList()); long totalTime = System.currentTimeMilli...
COMPACT_STRINGS默认为true,即该特性默认是开启的 coder方法判断COMPACT_STRINGS为true的话,则返回coder值,否则返回UTF16;isLatin1方法判断COMPACT_STRINGS为true且coder为LATIN1则返回true 诸如charAt、equals、hashCode、indexOf、substring等等一系列方法都依赖isLatin1方法来区分对待是StringLatin1还是StringUTF16 ...