Java Bigdecimalメモリ使用?
-
21-09-2019 - |
質問
で消費されるメモリの量を推定するためのガイドラインはありますか BigDecimal
?
これらに似たものを探しています ガイドライン 推定用 String
メモリ使用量。
解決
ソースのフィールドを見ると 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
言う
計算された場合、正規の文字列表現を保存するために使用されます。
あなたが電話しないと仮定する .toString()
, 、それはゼロバイトのままになります。したがって、 BigDecimal
IS(8+4+4)= 16バイト+ BigInteger
.
BigInteger
それ自体は4+4+4+4+4 = 20バイト+です mag
.
20+16は、合計36バイトと大きさを与えます。これは、完全な整数を表すために必要なビットの最小数です。数のために n
必要になります log2(n)
INTに変換できるビット。あなたはについて使用する必要があります:
36 + Ceiling(log2(n)/8.0) bytes
(これには、文字列の例のリンクが行うように、他のオブジェクト記述子オーバーヘッドのいずれも含まれていませんが、一般的なアイデアが得られるはずです。)
他のヒント
の内部を掘り下げる場合 BigDecimal
重要である場合、コンパクトな表現を使用することがわかります<= Long.MAX_VALUE
. 。したがって、メモリの使用量は、あなたが表す実際の値によって異なる場合があります。
所属していません StackOverflow