Использование памяти Java BigDecimal?

Есть ли инструкция для оценки объема памяти, использованного a BigDecimal?

Поиск чего-то подобного этим инструкциям для оценки String использование памяти.

20
задан Marcus Leon 23 March 2010 в 15:30
поделиться

2 ответа

Если вы посмотрите на поля в источнике для 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) бит, которые можно преобразовать в целые числа. Вам следует использовать about:

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

(обратите внимание, что это не включает в себя какие-либо другие служебные данные дескриптора объекта, как в вашем примере ссылки для строк, но это должно дать вам хорошее общее представление.)

21
ответ дан 30 November 2019 в 00:59
поделиться

Если вы углубитесь во внутреннее устройство BigDecimal , вы увидите, что он использует компактное представление, если мантисса <= Long.MAX_VALUE . Следовательно, использование памяти может варьироваться в зависимости от фактических значений, которые вы представляете.

3
ответ дан 30 November 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: