<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 9 – 精簡字符串改進 [JEP 254] > 原文: [https://howtodoinjava.com/java9/compact-strings/](https://howtodoinjava.com/java9/compact-strings/) 直到 Java 8,Java 中的[字符串](https://docs.oracle.com/javase/9/docs/api/java/lang/String.html)內部都由`char[]`表示。 每個`char`都以 2 個字節存儲在內存中。 oracle 的 JDK 開發人員分析了許多客戶端的應用程序堆轉儲,他們注意到大多數字符串只能使用 [Latin-1 字符集](https://cs.stanford.edu/~miles/iso8859.html)表示。 拉丁 1 個字符可以存儲在一個字節中,比`char`數據類型存儲少 50%(1 個字節)。 因此,JDK 開發人員將`String`類的內部存儲從`char[]`缺省設置為`byte[]`。 通常,這導致節省了堆內存的大量空間,因為字符串對象實際上占據了堆內存的很大一部分。([來源](http://cr.openjdk.java.net/~shade/density/state-of-string-density-v1.txt)) 您可以使用`java`命令的`-XX:-CompactStrings`參數來控制應用程序中此特性的使用。 ## Java 9 之前的字符串類 在 Java 9 之前,字符串數據存儲為`char`數組。 每個字符需要 16 位。 ```java public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //The value is used for character storage. private final char value[]; } ``` ## Java 9 之后的字符串類 從 Java 9 開始,現在使用字節數組以及用于編碼引用的標志字段在內部表示字符串。 ```java public final class String implements java.io.Serializable, Comparable<String>, 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 字符串的內部表示。 禁用精簡字符串可能有益的情況包括: 1. 當知道應用程序將大量分配多字節字符字符串時 2. 在從 Java SE 8 遷移到 Java SE 9 的過程中觀察到性能下降的意外事件中,分析表明精簡字符串引入了回歸。 在這兩種情況下,禁用精簡字符串都是有意義的。 這純粹是實現更改,不更改現有的公共接口。 將我的問題放在評論部分。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看