java.util.BitSet由long []支持,因此最小大小爲64位。我需要緩存大量(〜2M)的對象,每個對象都需要大小爲23的BitSet。是否有替代BitSet的小尺寸更節省空間?例如,是否有一個BitSet類型的數據結構支持byte []而不是long []?這將允許我以3字節而不是8來存儲我的23位。替代java.util.BitSet的小尺寸?
1
A
回答
6
java.util.BitSet
類設計用於更大的位集。當你需要大小爲23的比特集時,即使是基於比特集的ob 3字節也會使用太多的內存,因爲任何大小的數組都會爲該數組本身使用額外的參考,這很可能是四到八個字節。
內存方面最經濟的解決方案是使用int
s代替位集,並編寫您自己的所需位集操作實現。由於對位的操作集是從位操作複製在大多數情況下,你應該實現它們沒有問題:
boolean get(int mySet, int index) {
return (mySet & (1<<index)) != 0;
}
void set(int mySet, int index) {
mySet |= (1<<index);
}
void clear(int mySet, int index) {
mySet &= (1<<index);
}
...等等。
+0
+1與位掩碼一起使用int。 –
+1
不要忘記int中的值是通過java傳遞的,所以如果你調用set(..),你傳入的值不會改變。 – thalador
0
首先,長度爲3的字節數組需要多於3個字節。 Java中的任何對象實例都有內存開銷,包括BitSet。
爲了保持低內存消耗,嘗試使用int數組的元素來設置位。這樣的元素不能被表示爲一個對象,所以你必須開發過程接口而不是面向對象。告訴我們你需要什麼樣的操作,我們會提供更詳細的建議。
相關問題
- 1. 減小尺寸
- 2. 谷歌地圖以%代替px尺寸
- 3. Android - 縮小圖像尺寸不會減小尺寸的比例
- 4. gtk最小尺寸
- 5. 縮小UIImage的尺寸
- 6. Android小部件的尺寸?
- 7. 減小照片的尺寸
- 8. 減小SNMP4J的尺寸
- 9. f.date_select框的尺寸更小
- 10. GGplot2的最小尺寸geom_text()
- 11. 減小硒幀的尺寸
- 12. 縮小JRE的尺寸
- 13. 在較小的屏幕尺寸下適合尺寸的內容
- 14. 爲什麼視頻的尺寸小於iOS照片的尺寸
- 15. 以最小尺寸呈現標準尺寸的圖像
- 16. imageloader類顯示尺寸比平常尺寸更小的圖像
- 17. 動畫減小其尺寸
- 18. 縮小圖像尺寸imagemagic
- 19. 按鈕:最小尺寸
- 20. EWS - 圖像大小/尺寸
- 21. 縮小尺寸列表1
- 22. 佈局和最小尺寸
- 23. 最小化圖片尺寸
- 24. Scikit-learn Imputer縮小尺寸
- 25. 最小對分尺寸?
- 26. html-div,最小尺寸
- 27. 減小iPhone應用尺寸
- 28. 浮動QDockWidget最小尺寸
- 29. LineSeries圖點減小尺寸
- 30. Android App小部件尺寸
'int'會好嗎?你使用什麼'BitSet'方法? – dasblinkenlight
對於一個明確的建議,我們需要更多地瞭解你正在緩存的對象,以確保這個優化首先是有意義的。如果一個'BitSet'和一個優化的選擇之間的區別只會減少20%的覆蓋面呢? –