2016-07-07 8 views
5

In der Dokumentation wird -Xss zum Festlegen der Stapelgröße von JVM verwendet. Aber ich bin sehr verwirrt über diese Aussage.Was macht die Option -Xss JVM eigentlich?

In Java hat jeder Thread seinen eigenen Stack. Enthält die durch -Xss angegebene Nummer:

  1. Der Gesamtspeicher, der von allen Threads als Stack verwendet werden kann? z.B. Wenn -Xss auf 256 KB festgelegt ist, erstellen alle Threads innerhalb dieser 256 KB Speicher einen eigenen Stack.

  2. Die Größe jedes Stapels eines Threads. z.B. Wenn -Xss auf 256K gesetzt ist, hat jeder Thread einen Stack von 256K big. Daher wird 10 Thread insgesamt 2560K verwenden.

Vielen Dank.

EDIT:

Danke für Ihre Antworten. Es sieht so aus als wäre es das (2) Senario oben. -Xss gibt die größte Stapelgröße eines bestimmten Threads an.

Dann habe ich eine Follow-up-Frage: Wo wird dieser Speicher zugewiesen werden?

Wir können den reservierten Heap-Speicher mit -Xmx und -Xms angeben. Wird der Stack mit diesem reservierten Speicher zugeordnet? Oder es wird direkt aus dem nativen Speicher zugeordnet?

+0

[Diese Antwort] (http://stackoverflow.com/a/17167720/3788176) besagt, dass ein Synonym "-XX: ThreadStackSize" ist, was bedeutet, dass es pro Thread ist. –

+0

https://stackoverflow.com/questions/4967885/jvm-option-xss-what-does-it-do-exactly –

Antwort

6

Es ist die Größe des Stapels pro Faden unter Angabe this page on the java command:

-XssGröße

den Faden Stapelgröße Sets (in Bytes) ...

So ist es der zweite Teil in Ihrem Frage. Ich denke jedoch nicht, dass es generell korrekt ist, alle Threadstapelgrößen zusammenzufassen. Abhängig von der JVM-Implementierung ist die tatsächliche Gesamtstapelgröße möglicherweise nicht 2560 KB. Beachten Sie dieses Zitat aus der JVM-Spezifikation:

Diese Spezifikation ermöglicht Java Virtual Machine-Stacks, entweder eine feste Größe zu haben oder dynamisch zu erweitern und zusammenzuziehen, wie von der Berechnung benötigt. Wenn die Stacks der Java Virtual Machine eine feste Größe haben, kann die Größe jedes Stacks der Java Virtual Machine unabhängig voneinander gewählt werden, wenn dieser Stack erstellt wird.

3

Jeder Thread hat seinen eigenen Stack. Die meisten JVMs verwenden native Threads und diese Stacks verwenden nativen virtuellen Speicher. Der Vorteil der Verwendung von virtuellem Speicher besteht darin, dass nur die berührten Seiten in den verwendeten Speicher umgewandelt werden.

Wo wird dieser Speicher zugewiesen?

Native Speicher wie Threads Stapel in einem C-Programm würde.

Wir können den reservierten Heap-Speicher mit -Xmx und -Xms angeben. Wird der Stack mit diesem reservierten Speicher zugeordnet?

Die Stapel verwenden nicht den Haufen so, nein.

Oder es ist aus dem nativen Speicher direkt zugeordnet?

ja.

Verwandte Themen