多くの文字列オブジェクトをメモリ (数百 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 など) を提供するラッパー クラスを探しています。
質問する
1824 次
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 に答える