2013-01-09 55 views
6

我需要在內存中保存大量的字符串對象(數百MB),並且我想將它們保存爲UTF-8格式,因爲在大多數情況下,它將需要一半的內存作爲默認實現使用。
默認的String類需要12個字符的字符串60個字節(請參閱http://blog.griddynamics.com/2010/01/java-tricks-reducing-memory-consumption.html)。
我的大部分字符串都是10-20個字符。
我不知道是否有一些開源的庫提供這種字符串的包裝?
我知道如何將字符串轉換爲UTF-8字節數組,但我正在尋找一個包裝類,它將提供所有需要的工具函數(哈希,等於,toString,fromString等)。用於java的UTF-8字符串類

+2

http://docs.oracle.com/javase/tutorial/i18n/text/string.html – Doorknob

+2

Java以UTF-16內部存儲所有字符串,因此12個字符的字符串在內部爲24個字節。不計算強制性對象開銷,這個60字節的數字來自哪裏? – fge

+0

...最少24個字節,因爲UTF編碼是可變長度的(授予,在OP的示例中,您必須使用一些嚴重異域字符超過24個字節) –

回答

2

的Apache Avro公司有它實現CharSequenceUTF8 wrapper class,但我不知道這樣的對象

的內存消耗

Hadoop的具有頗有些種類的接口的Text class你的願望

+0

你的意思是使兩個鏈接相同嗎? – AgilePro

+0

不,確定:-)我已經做了更正 – Grooveek

0

如果你想有一個爲每個字符串創建不同的對象,並且希望它們儘可能緊湊,然後使用字節數組。這將是每字符1字節對2,並且你將不會有字符串標題的開銷(這可能增加每個對象32字節)。

但是,當然如果不首先轉換爲字符串,您將無法使用這些字符串方法。

但是,如果您真的想節省空間,請將字符串背靠背地存儲在幾個較大的數組中,並使用「dope vectors」來查找單個字符串。