2012-09-16 4 views
5

Wenn ich schreibe dies in Java:Nimmt s 3 Bytes in Java? wann: String s = "abc"; Java

String s = "abc"; 

Hat s besetzen nur 3 Bytes im Speicher?
Wenn wahr, wie JVM das Ende des String-Objekts findet?
Benötigt dies mehr Bytes im Speicher?

+2

Lesen Sie die Quelle für die Klasse "String". – SLaks

+0

Wenn Sie die Quelle für die String-Klasse lesen, sehen Sie, dass sie die Länge speichert, so wie sie weiß, wie lang die Zeichenfolge ist. BTW "abc" verwendet ungefähr 48 Bytes Speicher. –

Antwort

7

Es ist mehr als 3 Bytes nimmt, für ausführliche Erklärung lesen von this page

Aus Gründen werden wir unten erforschen, die minimale Speichernutzung eines Java String (in der Hotspot Java 6 VM) ist im allgemeinen wie folgt:

Minimum String memory usage (bytes) = 8 * (int) ((((no chars) * 2) + 45)/8) 

Oder anders ausgedrückt:

  • die Anzahl der chara multiplizieren cters der Schnur durch zwei;
  • add 38;
  • Wenn das Ergebnis kein Vielfaches von 8 ist, runden Sie auf das nächste Vielfache von 8 auf;
  • Das Ergebnis ist in der Regel die minimale Anzahl von Bytes, die vom String in den Heap aufgenommen werden.

This page aus der gleichen Website beschreibt auch Möglichkeiten, in denen Sie Speicher mit Klassen anders als String

+0

hinzufügen 38? oder 45 hinzufügen? – Al2O3

+1

Add 38. Die 45 ist zum Aufrunden statt nach unten. –

1

Minimum String Speichernutzung (Bytes) = 8 * (int) speichern können ((((num von Zeichen) * 2) + 45)/8)

+0

theoretisch könnte es weniger als das sein ... wenn Sie Strings, die Backing-Arrays teilen, berücksichtigen. –

+0

Das ist etwas anderes, OP fragt nach Speichernutzung und einer einzelnen Zeichenfolge. – awm

2

Kurze Antwort: Nein, noch lange nicht. JVM-Saiten sind dafür bekannt, ziemlich schwer zu sein; Das Objekt enthält nicht nur einen Zeiger auf das Zeichenfeld, sondern auch seine Länge. Und der interne Speicher verwendet UTF-16-Codepunkte, also könnte Ihre Frage lauten "dauert es 6 Bytes?" :-)

Eine technische Referenz auf die JVM gibt Ihnen die genaue Größe von String-Objekten. Sie können auch einige interessante Blogposts such as this one und technische Artikel finden.

Die Frage nach der genauen Größe von String-Objekten ist sehr viel mehr. Wir können in die Komprimierung von Objektzeigern, String-Internierung usw. eingreifen. Es gibt auch die Tatsache, dass, da Strings unveränderlich sind, wir häufig den String-Speicher teilen, wie dies beispielsweise der Fall ist, wenn Sie aufrufen.

Was jedoch immer wahr ist: es ist mehr als 3 Bytes.

Verwandte Themen