概念
在 Java 中,char
和 byte
型別占用的存盤空間是不同的,
-
char
型別:char
是 16 位無符號的 Unicode 字符型別,用于表示單個字符,在 Java 中,char
型別占用 2 個位元組(16 位)的存盤空間, -
byte
型別:byte
是 8 位有符號整數型別,表示范圍在 -128 到 127 之間的整數,在 Java 中,byte
型別占用 1 個位元組(8 位)的存盤空間,
需要注意的是,雖然 char
和 byte
在 Java 中分別占用不同的存盤空間,但它們表示的資料型別和范圍也是不同的,char
用于表示字符,而 byte
用于表示整數,在處理資料時,應根據具體的需求和資料型別選擇合適的型別,
char(0~65535)
char
在 Java 中占用 2 個位元組(16 位)的空間是因為 Java 使用的是 Unicode 字符編碼,其中字符的表示范圍為 0 到 65535(即 2^16-1),
Unicode 是一種國際標準字符集
,為世界上幾乎所有的字符分配了唯一的識別符號,它包含了各種語言的字符、符號、表情等,為了能夠表示這么多的字符,Java 選擇了使用 2 個位元組(16 位)來存盤 char
型別,
Java 的 char
型別使用的是 UTF-16 編碼,它是一種可變長度的編碼方式,可以使用 2 個位元組來表示大部分的字符,但對于一些特殊字符(如表情符號),可能需要使用額外的代碼點進行編碼,
需要注意的是,Unicode 字符集實際上定義了超過 65536 個字符,為了表示超出 65535 的字符,Unicode 使用了一種擴展編碼方式,稱為 UTF-16 編碼,UTF-16 編碼使用了一種叫作代理對(Surrogate Pair)的技術,將一個字符表示為兩個 char
型別的編碼單元,
因此,雖然 char
型別的范圍是 0 到 65535,但實際上可以表示更多的字符,在處理 Unicode 字符時,需要特別注意代理對的處理,以確保正確地處理和顯示字符,
byte(-128~127)
在 Java 中,byte
是一個基本資料型別,用于表示 8 位的有符號整數,它的取值范圍為 -128 到 127,
byte
型別通常用于處理位元組資料,例如讀取和寫入二進制檔案、網路傳輸中的位元組流、加密演算法等,由于 byte
型別占用的空間較小,因此在需要節省記憶體或處理位元組級資料的情況下,經常使用 byte
型別,
以下是一些關于 byte
型別的特點和用法:
-
取值范圍:
byte
型別的取值范圍為 -128 到 127,可以通過Byte.MIN_VALUE
和Byte.MAX_VALUE
常量來獲取最小值和最大值, -
記憶體占用:
byte
型別占用 1 個位元組(8 位)的存盤空間, -
位元組操作:
byte
型別適用于處理位元組級資料,例如讀取和寫入二進制檔案、網路傳輸中的位元組流等,可以使用輸入輸出流、緩沖流等類來讀寫byte
資料, -
陣列:可以創建
byte
陣列來存盤一組位元組資料,例如,byte[] data = https://www.cnblogs.com/lori/archive/2023/06/26/new byte[10];
創建了一個長度為 10 的byte
陣列, -
型別轉換:
byte
型別可以與其他整數型別進行相互轉換,可以使用型別轉換運算子(如(byte) value
)將其他整數型別轉換為byte
型別,或者將byte
型別轉換為其他整數型別,
需要注意的是,在進行 byte
型別的運算時,會發生整數提升,也就是說,byte
型別的運算元會先被提升為 int
型別,然后進行運算,
byte a = 10;
byte b = 20;
byte c = (byte) (a + b); // 需要進行型別轉換
總而言之,byte
型別在 Java 中是用于表示 8 位有符號整數的資料型別,適用于處理位元組級資料和節省記憶體的場景,
java9對字串存盤的優化Compact Strings(緊湊字串)
Java 9 對字串的優化主要集中在字串存盤和處理方面,引入了一項被稱為 Compact Strings(緊湊字串)的改進,Compact Strings 的目標是減少字串在記憶體中的占用空間,提高性能和效率,
在 Java 8 及之前的版本中,字串內部使用 char 陣列來存盤字符資料,并使用額外的 int 型欄位記錄字串的偏移量和長度,這種表示方式在包含大量 ASCII 字符的字串中會造成空間浪費,因為每個字符仍然占用 2 個位元組的存盤空間,
Java 9 引入了 Compact Strings 的概念,對于僅包含 Latin-1 字符集(即 Unicode 編碼范圍在 U+0000 至 U+00FF 之間)的字串,使用位元組陣列存盤資料,每個字符只占用 1 個位元組,這樣可以大大減少這類字串的記憶體占用,對于包含非 Latin-1 字符的字串,仍然使用 char 陣列存盤資料,每個字符占用 2 個位元組,
Compact Strings 的優化帶來了兩個主要的好處:
-
記憶體占用減少:對于僅包含 Latin-1 字符的字串,在記憶體中占用的空間減少一半,從而可以降低記憶體消耗,
-
性能提升:減少了字串的記憶體占用,可以減少記憶體的分配和垃圾回收的頻率,從而提高了性能和效率,
需要注意的是,Compact Strings 僅適用于字串物件的內部表示方式,對于開發者來說,字串的使用方式和 API 并沒有變化,開發者無需對現有的代碼進行修改,可以繼續使用字串相關的方法和操作,
這項優化是在底層實作層面上進行的,旨在提高 Java 運行時的性能和記憶體利用率,使開發者能夠更高效地處理字串資料,
-XX:+CompactStrings
在 Java 命令列啟動時,可以通過使用 -XX:+CompactStrings
引數來開啟 Compact Strings,該引數告訴 Java 虛擬機在啟動時啟用緊湊字串(Compact Strings)優化,
以下是使用 Java 命令列啟動并開啟 Compact Strings 的示例:
java -XX:+CompactStrings -jar YourJarFile.jar
在上述示例中,-XX:+CompactStrings
引數指示 Java 虛擬機開啟 Compact Strings 優化,-jar YourJarFile.jar
部分是指定要執行的 JAR 檔案,
請注意,Compact Strings 優化是默認開啟的,可以在不使用 -XX:+CompactStrings
引數的情況下自動啟用,但如果需要明確指定開啟或禁用 Compact Strings,可以使用相應的命令列引數,
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556010.html
標籤:其他
上一篇:Maven進階學習指南
下一篇:返回列表