Frage

Gibt es eine Richtlinie für die Schätzung der von a konsumierten Speichermenge BigDecimal?

Auf der Suche nach etwas Ähnlichem wie diesen Richtlinien zur Schätzung String Speichernutzung.

War es hilfreich?

Lösung

Wenn Sie sich die Felder in der Quelle für ansehen BigDecimal Es gibt:

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 +?

Der Kommentar für stringCache sagt

Wird verwendet, um die kanonische String -Darstellung zu speichern, falls berechnet.

Angenommen, Sie rufen nicht an .toString(), Es bleibt Null Bytes. Somit BigDecimal IS (8+4+4) = 16 Bytes+ BigInteger.

BigInteger selbst ist 4+4+4+4+4 = 20 Bytes+ mag.

20+16 ergibt insgesamt 36 Bytes zuzüglich der Größe, was immer die minimale Anzahl von Bits ist, die erforderlich sind, um die vollständige Ganzzahl darzustellen. Für eine Nummer n es wird brauchen log2(n) Bits, die in INTs umgewandelt werden können. Sie sollten ungefähr verwenden:

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

(Beachten Sie, dass dies keiner der anderen Objektdeskriptor -Overheads wie Ihr Beispiel -Link für Zeichenfolgen enthält, aber es sollte Ihnen eine gute allgemeine Idee geben.)

Andere Tipps

Wenn Sie sich in die Interna befinden BigDecimal Sie werden feststellen, dass es eine kompakte Darstellung verwendet, wenn der Signifikant <= <= ist Long.MAX_VALUE. Daher kann die Speicherverwendung je nach den tatsächlichen Werten variieren, die Sie darstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top