回答
如果你看一下在源BigDecimal的領域有:
BigDecimal:
long intCompact +8 bytes
int precision +4 bytes
int scale +4 bytes
String stringCache +?
BigInteger intVal +?
BigInteger:
int bitCount +4 bytes
int bitLength +4 bytes
int firstNonzeroIntNum +4 bytes
int lowestSetBit +4 bytes
int signum +4 bytes
int[] mag +?
爲stringCache的一句話,就是「用來存儲的規範化字符串表示,如果計算出來。」,所以假設你不t調用toString,我們會將它保留爲零字節,所以總共有BigDecimal中的(8 + 4 + 4)= 16字節+ BigInteger和BigInteger中的4 + 4 + 4 + 4 + 4 = 20字節+ mag。所以總共有36個字節加上這個數量級。據我所知,幅度始終是表示整個整數所需的最小位數,因此對於數字n,它將需要log2(n)位,可將其轉換爲整數。所以一般你應該使用約:
36 + Ceiling(log2(n)/8.0) bytes
(注意,這不包括任何其他的對象描述符的開銷,因爲你的榜樣鏈接,串並,但它應該給你一個很好的總體思路。)
請記住,'stringCache'和'intVal'將具有引用指針(依賴於4或8字節的jvm impl)。還要記住最小12字節對象頭部開銷('BigInteger'和'BigDecimal',int []),最後8byte對齊(舍入)所有對象大小。 – 2014-01-25 17:07:46
s/Cieling /天花板/ – thisfred 2014-11-10 20:05:00
如果你深入到BigDecimal
的內部,你會發現它使用緊湊的表示形式,如果有效數是< = Long.MAX_VALUE
。因此,內存使用情況可能會因您所代表的實際值而異。
緊湊型表示是什麼? – 2010-03-23 15:45:41
- 1. Java內存使用情況
- 2. java內存使用情況
- 3. redis內存使用情況
- 4. Java零矩陣內存使用情況
- 5. Docker Java內存使用情況
- 6. V8內存使用情況
- 7. Tcl_Format內存使用情況
- 8. Silverlight內存使用情況
- 9. BlackBerry內存使用情況
- 10. php內存使用情況
- 11. iphone內存使用情況
- 12. IronPython內存使用情況
- 13. CCLabelBMFont內存使用情況
- 14. Android內存使用情況
- 15. GPUImage內存使用情況
- 16. Linux內存使用情況
- 17. Listview內存使用情況
- 18. 內存使用情況
- 19. IIS內存使用情況
- 20. Silverlight內存使用情況
- 21. cmd內存使用情況
- 22. MYSQL內存使用情況
- 23. mod_wsgi內存使用情況
- 24. SqlDataAdapter內存使用情況
- 25. BigDecimal(Java)的內存消耗
- 26. Flash總內存使用情況和TaskManager內存使用情況不一樣?
- 27. Playframework的內存使用情況
- 28. 內存使用情況和代碼android
- 29. JBoss的內存使用情況?
- 30. visualvm監視內存使用情況
與更大的常數大致相同。當然,就像'String'一樣,它依賴於實現。 – 2010-03-23 15:35:59
你讀過這個:http://www.javaworld.com/javaworld/javatips/jw-javatip130.html – PeterMmm 2010-03-23 15:47:09