Czy istnieje wskazówka do oszacowania ilości pamięci zużytej przez BigDecimal
?Użycie pamięci Java BigDecimal?
Szukasz czegoś podobnego do tych guidelines do oszacowania wykorzystania pamięci w postaci String
.
Czy istnieje wskazówka do oszacowania ilości pamięci zużytej przez BigDecimal
?Użycie pamięci Java BigDecimal?
Szukasz czegoś podobnego do tych guidelines do oszacowania wykorzystania pamięci w postaci String
.
Jeśli spojrzeć na polach w źródle dla BigDecimal jest:
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 +?
Komentarz do stringCache jest „używany do przechowywania kanoniczną reprezentację ciąg, czy obliczona.”, Więc przy założeniu, że don” t call toString zostawiamy to jako zero bajtów, więc w sumie są (8 + 4 + 4) = 16 bajtów + BigInteger w BigDecimal i 4 + 4 + 4 + 4 + 4 = 20 bajtów + mag dla BigInteger. Łącznie 36 bajtów plus magnitudo. O ile mogę powiedzieć, wielkość jest zawsze minimalna liczba bitów niezbędnych do reprezentowania pełnej liczby całkowitej, więc dla liczby n będzie potrzebować log2 (n) bitów, które mogą być konwertowane na ints. Tak w ogóle powinien być używany o:
36 + Ceiling(log2(n)/8.0) bytes
(Uwaga ta nie obejmuje żadnej z drugiej napowietrznej obiekt deskryptora jako link przykład dla strun ma, ale powinno dać dobry ogólny pomysł.)
Należy pamiętać, że 'stringCache' i 'intVal' będą miały wskaźniki odniesienia (zależne od 4 lub 8 jvm impl). Zapamiętaj również nagłówek nagłówka o min. 12bajtach ("BigInteger" i "BigDecimal", int []), a na końcu 8-bajtowe wyrównanie (zaokrąglenie w górę) wszystkich rozmiarów obiektów. –
s/Cieling/Ceiling / – thisfred
Jeśli zagłębisz się w wnętrzach BigDecimal
zobaczysz, że używa on zwartej reprezentacji, jeśli znacznik jest < = Long.MAX_VALUE
. Dlatego użycie pamięci może się różnić w zależności od rzeczywistych wartości, które reprezentujesz.
Co to jest zwarta reprezentacja? –
Tak samo z większą stałą. Oczywiście, jak 'String', jest to zależne od implementacji. –
Czy przeczytałeś ten: http://www.javaworld.com/javaworld/javatips/jw-javatip130.html – PeterMmm