Использование памяти Java BigDecimal?
есть ли руководство для оценки объема памяти, потребляемой BigDecimal
?
ищу что-то похожее на эти рекомендации по оценке String
использование памяти.
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, мы оставим это как нулевые байты, поэтому в общей сложности есть (8+4+4)=16 байт + BigInteger в BigDecimal и 4+4+4+4+4=20 байты + mag для BigInteger. Так что в общей сложности 36 байт плюс величина. Насколько я могу судить, величина всегда является минимальным количеством битов необходимо представить полное целое число, поэтому для числа n потребуется Log2 (n) бит, которые можно преобразовать в ints. Так что в целом вы должны использовать О:
36 + Ceiling(log2(n)/8.0) bytes
(обратите внимание, что это не включает в себя какие-либо другие накладные расходы дескриптора объекта, как ваша ссылка на пример для строк, но это должно дать вам хорошее общее представление.)
Если вы копаетесь во внутренностях BigDecimal
вы увидите, что он использует компактное представление, если мантисса Long.MAX_VALUE. Следовательно, использование памяти может варьироваться в зависимости от фактических значений, которые вы представляете.