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 个字节,并且您不会有 String 标头的开销(每个对象可能增加 32 个字节)。

当然,如果不先转换为 String,您将无法在这些上使用任何 String 方法。

但是,如果您真的想节省空间,请将字符串背靠背存储在几个较大的数组中,并使用“涂料向量”来定位各个字符串。

于 2013-01-10T21:48:15.317 回答