2017-03-25 2 views
2

Hier ist ein einfacher Code-Snippet in Java:Wie funktioniert die Speicherverwaltung für nicht instanziierte Klassen in Java?

class Box { 
    int width; 
    int height; 
    int depth; 
} 

Box catBox = new Box(); 

Wenn Konstruktor Box() ausgeführt wird, sind wir eine Instanz der Klasse Box zu bekommen. Die Frage ist - wie verhält sich der Compiler selbst, wenn er diese Klasse im Code erfüllt, bevor er instanziiert wird? Ich meine, dieser Teil:

class Box { 
    int width; 
    int height; 
    int depth; 
} 

Wie ist diese Klasse im Speicher als ein Objekt dargestellt? Und erstellt der Compiler im Schritt des Definierens einer solchen Klasse irgendwelche Metainformationen über diese Klasse im Speicher?

+3

Die [JVM-Spezifikation] (https://docs.oracle.com/javase/specs/jvms/se8/html/) könnte Sie interessieren. – user2357112

Antwort

3

Java-Klassen (Metadaten) innerhalb zul-gen Speicherplatz gespeichert wird mehr klare Antwort finden (In Java8, ist dies metaSpace), die die Namen der Klassen enthält, Methoden usw.

Java-Klasse Metadatenstruktur wird in der Regel als klass dargestellt, für die Sie für weitere Details here aussehen können.

0

Ja Java-Klassen werden auch als Objekte im Perm-gen-Bereich gespeichert, der JVM zugewiesen ist. Jede Klasse wird auch eine Referenz haben, die sich um die Methoden kümmert. Wenn Sie viele beobachtet haben, schlagen Sie vor, unabhängige statische Methoden zu verwenden, die nur einmal in diesen Perm-Gen-Speicher laden können und die Speicherauslastung ebenfalls reduzieren. Wenn wir die gleiche Methode unter einer Klasse statt statisch haben (obwohl das kann statisch gemacht werden) wir am Ende haben zwei Referenzen im Speicher für die gleiche Funktionalität, wie sie für eine Java-Klasse sind.

Verwandte Themen