Wo Methoden Leben? Stack oder im Heap?
Ich weiß, dass lokale Variablen und Parameter von Methoden live im stack, aber ich nicht in der Lage, herauszufinden, wo eigentlich Methoden live bei Java?
Wenn ich erkläre jedem Thread-Objekts wie:
Thread t=new Thread();
t.start();
Also heißt es ich habe einen separaten Aufruf von Methoden, abgesehen von der main-Methode. Was bedeutet es? Bedeutet es den Aufruf der getrennten Abfolge von Methoden über Stack-Speicher? Bin ich im Recht?
Die Art, wie du Formulierungen fühle ich mich unwohl. Die "Methode" "Leben" im code-Raum. Es ist nicht auf dem stack oder auf dem heap. Ein Objekt auf dem heap erstellt, die hat einen Zeiger für jede der Methoden. Das Objekt befindet sich in dem Haufen, aber die Methoden, die Sie Punkte werden in code.
InformationsquelleAutor | 2009-07-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einzelnen Threads zugeordnet wird, die seinen eigenen stack.
Dieser Artikel hat eine gute Einführung in die Speicher-Trennung innerhalb eines Java-Prozesses.
Ich habe gesehen, viele Szenarien, in denen Kunden umgesetzt haben enorm threaded Server auf der Grundlage, dass jeder thread hat sehr wenig, und Sie laufen in Probleme mit dem Gedächtnis. Das ist, weil jeder thread zugeordnet wird, die seinen eigenen stack, und diese (offensichtlich) addiert. Ich denke der Standardwert beträgt 512 Kb pro thread, aber ich habe nicht gefunden, eine kanonische Quelle.
InformationsquelleAutor Brian Agnew
Wenn ich mich richtig erinnere, die Methode code selbst wird live im code-Teil des Speichers, während die Variablen deklariert, intern wird live in den Stapel, und die Objekte werden auf dem heap erstellt. In Java ist die variable Zeiger und primitives Leben auf dem Stapel, während Sie alle erstellten Objekte im heap.
Für eine (schlechte) ASCII-Darstellung:
Dem der STAPEL repräsentiert den stack, KOSTENLOS steht den freien Speicher, der HEAP stellt die heap und CODE stellt den code-Raum.
Dies ist, was mein Gedächtnis sagt - einige Informationen könnten falsch sein.
InformationsquelleAutor aperkins
Stack besteht aus Methodenaufrufen. Was java-schiebt Sie auf den stack ist eine Methode invocation-Platte, die kapselt alle Variablen (sowohl Parameter und lokal instanziiert Variablen) für diese Methode. Beim starten einer Java-Anwendung die main-Methode, die automatisch enthält das args-parameter) ist das einzige, was auf dem Stapel:
Sagen, wenn Sie erstellen ein Foo-Objekt und Aufruf von foo.Methode () ist der stack sieht nun folgendermaßen aus:
Als Methoden aufgerufen werden, Sie werden auf dem Stapel abgelegt, und als Sie zurückkehren, werden Sie entfernt oder "knallte" vom Stapel. Als Variablen deklariert und verwendet den stack-Eintrags, das entspricht der aktuellen Methode (auf dem stack), wächst auch der Größe der Variablen.
Für dein Beispiel mit threads, jeder thread seinen eigenen stack, die existiert unabhängig von jeder anderen thread-stack.
InformationsquelleAutor Peter
Stack enthält alle lokalen Variablen aller aktiven Methodenaufrufe.
Der heap ist alles andere enthalten.
Als für Ihre sub-Frage: es bedeutet, dass ein neuer Stapel wird erstellt, mit seinen eigenen dedizierten Speicher.
Während Ihr neue Threads teilen sich den gesamten heap-Speicher (memory), bereitgestellt von der jvm
InformationsquelleAutor KingInk
Heap ist aufgeteilt in mehrere Generationen.
Bytecode, und seine corrosponding JIT-kompilierte Maschinencode Leben in die so genannte permanent generation, zusammen mit Internierten Strings und anderen Klasse Daten.
Obwohl es heißt "permanent" - generation, kann es immer noch Müll gesammelt. Einige Bibliotheken, frameworks und JVM-Sprachen generieren von bytecode zur Laufzeit, so dass die permanente Generierung manchmal müssen Aufräumen. Genau wie die anderen Generationen über den Haufen, aber (man normalerweise hofft) weniger Häufig.
InformationsquelleAutor Chris Vest
Den eigentlichen bytecode und/oder JIT code würde Leben würde in den Prozess-Speicher. Es würde wahrscheinlich nur ein Exemplar in der Prozess-Speicher, als alle threads in einem Prozess teilen, dass der Speicher. Alle Variablen gemeinsamen durch solche threads zugegriffen wird, indem die Methoden gemeinsam. Lokale Variablen zu den threads (auch Methode lokale Variablen, die innerhalb eines Threads) erstellt werden, innerhalb dieses Threads zu Gedenken.
InformationsquelleAutor Harper Shelby