7

多くの文字列オブジェクトをメモリ (数百 MB) に保持する必要があり、ほとんどの場合、デフォルトの実装で使用されるメモリの半分が必要になるため、それらを UTF-8 形式で保持したいと考えています。
デフォルトの String クラスでは、12 文字の文字列に 60 バイトが必要です ( http://blog.griddynamics.com/2010/01/java-tricks-reducing-memory-consumption.htmlを参照)。
私の文字列のほとんどは、10 ~ 20 文字の長さです。
そのような文字列のラッパーを提供するオープンソース ライブラリがあるのだろうか?
String を UTF-8 バイト配列に変換する方法は知っていますが、必要なすべてのユーティリティ関数 (Hash、Equal、toString、fromString など) を提供するラッパー クラスを探しています。

4

2 に答える 2

2

Apache Avro にはを実装するUTF8 ラッパー クラスCharSequenceがありますが、そのようなオブジェクトのメモリ消費量はわかりません

Hadoop には、必要な種類のインターフェイスを持つText クラスがあります。

于 2013-01-09T15:13:39.467 に答える
0

文字列ごとに個別のオブジェクトが必要で、できるだけコンパクトにしたい場合は、バイト配列を使用します。これは、文字あたり 1 バイト対 2 になり、文字列ヘッダーのオーバーヘッドはありません (オブジェクトあたりおそらく 32 バイトが追加されます)。

しかしもちろん、最初に String に変換しないと、これらに対して String メソッドを使用することはできません。

ただし、本当にスペースを節約したい場合は、個々の文字列を見つけるための「ドープベクトル」を使用して、文字列をいくつかの大きな配列に連続して保存します。

于 2013-01-10T21:48:15.317 に答える