Java BigDecimal 内存使用情况?
是否有用于估计 BigDecimal 消耗的内存量的指南?
寻找与这些指南类似的内容来估计String
内存使用情况。
Is there a guideline for estimating the amount of memory consumed by a BigDecimal
?
Looking for something similar to these guidelines for estimating String
memory usage.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您查看
BigDecimal
源代码中的字段,就会发现:stringCache
的注释如下:假设您不调用
.toString()
,它将保持零字节。因此,BigDecimal
为 (8+4+4)=16 字节 +BigInteger
。BigInteger
本身是4+4+4+4+4=20字节+mag
。20+16 总共 36 个字节加上大小,这始终是表示完整整数所需的最小位数。对于数字
n
,它将需要log2(n)
位,可以将其转换为整数。您应该使用 about:(请注意,这不包括任何其他对象描述符开销,就像您的字符串示例链接一样,但它应该为您提供一个很好的总体思路。)
If you look at the fields in the source for
BigDecimal
there is:The comment for
stringCache
saysAssuming you don't call
.toString()
, it will remain zero bytes. HenceBigDecimal
is (8+4+4)=16 bytes +BigInteger
.BigInteger
itself is 4+4+4+4+4=20 bytes +mag
.20+16 gives total of 36 bytes plus the magnitude, which is always the minimum number of bits necessary to represent the full integer. For a number
n
it will needlog2(n)
bits, which can be converted to ints. You should be using about:(note this doesn't include any of the other object descriptor overhead as your example link for strings does, but it should give you a good general idea.)
如果您深入研究 BigDecimal 的内部结构,您会发现如果尾数为 <= Long.MAX_VALUE,它会使用紧凑的表示形式。因此,内存使用情况可能会根据您所表示的实际值而有所不同。
If you dig into the internals of
BigDecimal
you'll see that it uses a compact representation if the significand is <=Long.MAX_VALUE
. Hence, the memory usage can vary depending on the actual values you're representing.