我需要在内存中保存大量的字符串对象(数百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等)。
答案 0 :(得分:2)
Apache Avro有UTF8 wrapper class实现CharSequence
,但我不知道此类对象的内存消耗
Hadoop有Text class,它有你想要的那种接口
答案 1 :(得分:0)
如果您希望每个字符串都有一个不同的对象,并且您希望它们尽可能紧凑,那么请使用字节数组。这将是每个字符1个字节对2,并且您将不会有String头的开销(每个对象可能增加32个字节)。
但是当然如果没有首先转换为String,你将无法使用任何String方法。
但如果你真的想节省空间,可以将字符串背对背地存储在几个较大的数组中,使用“涂料矢量”来定位各个字符串。