3

この古い質問に対する回答を読んだ後、私は現在、多数の小さなサイズ (15 ~ 25 文字の長さ) の文字列をより効率的に格納できるフレームワークがあるかどうかを知りたいと思っていますjava.lang.String

可能であれば、char[] の代わりに byte[] を使用して文字列を表現したいと思います。

私は定数になり、クラスStringによって提供される多数のユーティリティメソッドは実際には必要ありません。java.lang.String

4

2 に答える 2

3

Java 6 はこれを行い-XX:+UseCompressedStrings、一部の更新ではデフォルトでオンになっています。

Java 5.0または7にはありません。デフォルトでオンとしてリストされていますが、実際にはJava 7ではサポートされていません.:P

やりたいことによっては、独自のクラスを作成することもできますが、数 100 MB の文字列しかない場合、その価値はないと思います。

于 2012-08-08T12:13:22.857 に答える
0

ほとんどの場合、この最適化はそれに伴う労力と複雑さに見合うものではありません。(Peter Lawrey が示唆するように) VM が提供するものを受け入れるか、(java.lang.String を使用せずに) 独自のソリューションを実現するために多大な時間を費やします。

独自の String クラスが実装できるインターフェース CharSequence があります。残念ながら、CharSequence を受け入れる JRE メソッドはほとんどないため、「文字列」を他の API に渡す必要がある場合は、toString() をクラスで頻繁に使用する必要があることに注意してください。

また、String をハックして、よりメモリ効率の良い (そして GC にあまり適していない) 方法で String を作成することもできます。String には (パッケージ アクセス レベル) コンストラクター String(offset, count, char[]) があり、これは char をコピーせず、char[] を直接参照として受け取るだけです。すべての文字列を 1 つの大きな char[] 配列に入れ、リフレクションを使用して文字列を構築することができます。これにより、文字列内の char[] 配列によって通常導入されるオーバーヘッドの多くを回避できます。この方法は JRE のプライベート機能に依存しているため、あまりお勧めできません。

于 2012-08-08T12:39:31.387 に答える