23

によって消費されるメモリ量を見積もるためのガイドラインはありBigDecimalますか?

メモリ使用量を推定するためのこれらのガイドラインに似たものを探しています。String

4

2 に答える 2

23

ソースのフィールドを見ると、次の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、(8+4+4)=16 バイト +BigIntegerです。

BigIntegerそれ自体は 4+4+4+4+4=20 バイト +magです。

20+16 は、合計 36 バイトに絶対値を加えたものになります。これは常に、完全な整数を表すために必要な最小ビット数です。数値の場合、整数に変換できるビットnが必要になります。log2(n)あなたは約を使用する必要があります:

36 + Ceiling(log2(n)/8.0) bytes

(これには、文字列のリンクの例のように、他のオブジェクト記述子のオーバーヘッドは含まれていませんが、一般的なアイデアが得られるはずです。)

于 2010-03-23T15:48:31.297 に答える
2

の内部を掘り下げると、仮数BigDecimalが <= の場合、コンパクトな表現が使用されていることがわかりますLong.MAX_VALUE。したがって、メモリ使用量は、表現している実際の値によって異なります。

于 2010-03-23T15:42:27.567 に答える