2014-11-04 12 views
6

Die JVM-Spezifikation (JSE 8 Ausgabe) erwähnt:Ist der Frame im JVM-Heap zugeordnet oder der Stack zugeordnet?

Seite 12: 2.5.2 JVM Stacks: "Da der JVM-Stack wird nie direkt manipuliert, außer zu drücken und Pop-Frames kann Rahmen seines Heap zugewiesen"

Seite 15: 2.6: Frames: "Frames werden vom JVM-Stack des Threads zugewiesen, der den Frame erzeugt." Und auf Seite 16: "Beachten Sie, dass ein von einem Thread erstellter Rahmen lokal für diesen Thread ist und von keinem anderen Thread referenziert werden kann."

Das klingt ziemlich verwirrend für mich. Da ein Frame lokal für den Thread ist, der den Frame erstellt, sollten Sie den Frame im Heap zuordnen, da Heap von allen JVM-Threads gemeinsam genutzt wird. Es macht keinen Sinn, wenn hier etwas übersehen wird. Der Satz auf Seite 12 ist eine interessante Aussage.

Irgendwelche Hinweise? Vielen Dank.

+0

"möglicherweise Heap zugeordnet", meine Vermutung ist, möglicherweise ist da, weil es Implementierung abhängig ist und keine inhärenten Einschränkungen von JVM-Spezifikation. Der JVM-Implementierer hat die Freiheit, den Stack beliebig zu implementieren. – kosa

Antwort

3

JVM-Stack ist eine Abstraktion. Es kann überall oder nirgendwo zugewiesen werden. Z.B. Wenn eine Methode von JIT inline ist, hat sie keinen separaten Stack-Frame.

HotSpot JVM verwendet den nativen Thread-Stack als JVM-Stack. Es gibt jedoch JVM-Implementierungen (zum Beispiel CLDC HI), die JVM-Stapel in Java Heap zuordnen. Der Vorteil dieses Ansatzes ist eine einzige Speicherverwaltung für alles, einschließlich Thread-Stacks. Eine solche JVM kann auf einer Plattform ohne Standard-Speichermanager (wie libc) oder sogar ohne OS laufen.

JVM Heap ist auch eine Abstraktion. Es ist nicht mehr "geteilt" zwischen JVM-Threads als native Thread-Stacks. Der Heap kann auch Thread-lokale Bereiche haben. Gleichzeitig befinden sich native Thread-Stacks im virtuellen Speicher, der auch von allen Threads des Prozesses gemeinsam genutzt wird.

+0

Gute Hintergrundeinleitung, aber noch kein direkter Hinweis auf die Antwort auf diese Frage ... –

+0

@ user1139247 Warum nicht? * "Ist der Frame im JVM-Heap zugeordnet oder der Stack zugeordnet?" * - Ich habe beide Arten der JVM-Implementierung angegeben. Die beliebteste, HotSpot JVM, verwendet native Stacks. * Warum sollte der Frame im Heap zugewiesen werden, da Heap von allen JVM-Threads gemeinsam genutzt wird? * - Ich habe auch von Vorteilen eines solchen Ansatzes gesprochen. – apangin

Verwandte Themen