2015-05-12 4 views
5

Wenn wir eine Referenzvariable haben, z.B. um es zu vereinfachen Integer i können wir annehmen, dass die Größe von i ist ungefähr 16 Bytes Overhead + 4 Bytes für die tatsächlichen int + 4 Bytes padding, d. h. 24 Bytes.
Also meine Frage ist, wenn i null ist, haben wir nur 4 Bytes der Referenz, die nirgendwo hinzeigen oder gibt es irgendwelche anderen "versteckten" zusätzlichen Informationen zu diesem?Wie viele Bytes ein Null-Objekt?

+0

Haben Sie das Objekt bedeuten, oder die Referenz? – yshavit

+0

Korrigieren. Wir haben nur die 4 Bytes der Referenz, die auf null zeigen. –

Antwort

2

Wenn ich mich richtig erinnere, erwähnt die JVM-Spezifikation, dass null nicht erforderlich ist, um einen bestimmten Wert oder eine Darstellung zu haben, so könnte es alles sein. Was es in der Regel ist, weiß ich nicht, aber eine faire Schätzung ist wahrscheinlich 32 oder 64 Bits von Nullen, abhängig von der JVM-Version.

bearbeiten: Hier ist der relevante Abschnitt: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.4

Die Java Virtual Machine Spezifikation schreibt nicht einen konkreten Wert Codierung null.

Cheers,

1

Ja, es verwendet immer noch Erinnerung. Verwendet 4 Bytes für eine 32bit und 8 für eine 64 ich glaube.

mehr Informationen zu diesem Thema gefunden: Java - Does null variable require space in memory

+1

Wenn Sie einen Verweis auf "null" festlegen, zeigt es nicht auf ein Objekt im Heap (das Heapspeicher verbraucht). Die Referenz selbst muss jedoch gespeichert werden. Als ein Feld in einem Objekt oder einem Slot im lokalen Stack-Frame (wenn es sich um eine lokale Variable handelt). Und dies belegt natürlich so viele Bytes wie die Größe des "gewöhnlichen Objektzeigers" (d. H. 32 oder 64 Bit). In Objects kann es zu einem Padding für Felder kommen und auf Stacks gibt es eine gewisse Wiederverwendung (oder im Falle einer Rekursion mehrere Vorkommen des gleichen Verweises). Aber das ist alles unabhängig vom tatsächlichen Wert der Referenz (null oder nicht). – eckes