2017-12-11 6 views
0
class TreeNode{ 
    int val; 
    TreeNode left; 
    TreeNode right; 
} 
TreeNode t = new TreeNode(4); 
t.left = new TreeNode(3); 
t.right = new TreeNode(5); 

Nur wundern ist es 3 * 32 (Bit) = 96? Weil jede Ganzzahl 32 Bit kostet. Ich bin mir nicht sicher, ob ich richtig kalkuliere?Wie viele Bits wird diese Baumstruktur verwenden?

+0

Berücksichtigen Sie die Größe der Referenzen? –

+0

Ich weiß nicht, wie man die Größe der Referenzen berechnet ..... Könnten Sie helfen? – user9012203

+0

https://softwareengineering.stackexchange.com/questions/209249/what-is-the-size-of-a-reference-variable-in-java-can-it-be-berechnet –

Antwort

0

Dies kann keine absolute Antwort erhalten, da es von internen Details Ihrer aktuellen JRE abhängt, die sich sehr wahrscheinlich zwischen den Versionen ändern werden.

Lassen Sie uns die Grundlagen gerade für einige 32-Bit-Beispiel JRE erhalten:

  • ein int ist 4 Bytes = 32 Bits
  • eine Referenz ist 4 Bytes = 32 Bits (wird in einem 64-Bit länger sein Java)
  • eine Instanz benötigt einige Header-Bytes (möglicherweise 16 Bytes = 128 Bits) plus ihre Felder. In einigen Situationen benötigt das Layout einige zusätzliche "Auffüll" -Bytes.

Instanzen werden auf dem "Heap" erstellt, lokale Variablen auf dem "Stapel".

auf Grundlage dieser Zahlen, eine TreeNode Instanz braucht 224 Bits:

  • 128 Bits Instanz Header
  • 32 Bits für val
  • 32 Bits für die left Referenz
  • 32 Bits für die right Referenz

Sie erstellen 3 TreeNodes, das sind also 672 Bytes auf dem Heap.

Darüber hinaus haben Sie eine Variable t auf dem Stapel, eine Referenz von 32 Bits.

Noch einmal, dies sind nur Beispielzahlen, es hängt von der verwendeten JRE-Version ab.