JDK9的新特性:String压缩和字符编码
文章目錄
- 簡介
 - 底層實現
 - 總結
 
簡介
String的底層存儲是什么?相信大部分人都會說是數組。如果要是再問一句,那么是以什么數組來存儲呢?相信不同的人有不同的答案。
在JDK9之前,String的底層存儲結構是char[],一個char需要占用兩個字節的存儲單位。
據說是JDK的開發人員經過調研了成千上萬的應用程序的heap dump信息,然后得出了一個結論:大部分的String都是以Latin-1字符編碼來表示的,只需要一個字節存儲就夠了,兩個字節完全是浪費。
據說他們用了大數據+人工智能,得出的結論由不得我們不信。
于是在JDK9之后,字符串的底層存儲變成了byte[]。
更多內容請訪問www.flydean.com
底層實現
先看下java9之前的String是怎么實現的:
public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {//The value is used for character storage.private final char value[]; }再看下java9中String的實現和一些關鍵的變量:
public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */@Stableprivate final byte[] value;private final byte coder;@Native static final byte LATIN1 = 0;@Native static final byte UTF16 = 1;static final boolean COMPACT_STRINGS;static {COMPACT_STRINGS = true;}從代碼我們可以看到底層的存儲已經變成了byte[]。
再看一下coder變量,coder代表編碼的格式,目前String支持兩種編碼格式LATIN1和UTF16。
LATIN1需要用一個字節來存儲。而UTF16需要使用2個字節或者4個字節來存儲。
而COMPACT_STRINGS則是用來控制是否開啟String的compact功能。默認情況下COMPACT_STRINGS功能是開啟的。
如果我們想關閉COMPACT_STRINGS功能則可以使用-XX:-CompactStrings參數。
總結
本文講解了新的String實現和COMPACT_STRINGS模式的關閉方法。
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
 - Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
 - Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
 - java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
 
本文作者:flydean程序那些事
本文鏈接:http://www.flydean.com/jdk9-string-compact/
本文來源:flydean的博客
歡迎關注我的公眾號:程序那些事,更多精彩等著您!
總結
以上是生活随笔為你收集整理的JDK9的新特性:String压缩和字符编码的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 小师妹学JavaIO之:File cop
 - 下一篇: JDK9的新特性:JPMS模块化