Erhöhen des Stapelspeichers eines einzelnen Worker-Threads in Java

In meiner Java-Webanwendung habe ich einen einzelnen Hintergrund-Worker-Thread, der viel Stapelspeicher benötigt, da er mithilfe der activiti-Workflow-Engine und umfangreicher Skriptaufgaben einen sehr komplexen Workflow ausführt.

Derzeit muss ich die JVM Xss-Einstellung auf einem 64-Bit-Java und Tomcat auf 16 MB setzen, um alle StackOverflowErrors zu umgehen. Wenn der Fehler auftritt, ist der Stack-Trace sehr groß (mehrere hundert Zeilen lang), aber alles geschieht innerhalb der Engine, sodass ich nichts dagegen unternehmen kann.

Meine Frage ist nun: Gibt es eine Möglichkeit, die Stapelgröße eines einzelnen Threads zur Laufzeit zu erhöhen?

Ich möchte die standardmäßigen XSS-Einstellungen für JVMs für alle Threads in der Anwendung auf 512 KB senken. Ich weiß, dass dies ausreicht, und den Worker nur mit 16 MB ausführen.

Die Java-API bietet Informationen zu diesem Thema für einen Konstruktor der Thread-Klasse:

public Thread(ThreadGroup group,
              Runnable target,
              String name,
              long stackSize)

es wird jedoch erwähnt, dass das Verhalten nicht garantiert ist ([1]) und ich keine Informationen gefunden habe, wenn es unter Windows funktionieren würde.

Wenn der Stapelspeicherplatz eines Threads nicht vergrößert werden kann und ich 16 MB als Standardwert angeben muss, welche Konsequenzen hätte eine so hohe Einstellung? Bedeutet das, dass jeder neue Thread bei der Initialisierung 16 MB Speicherplatz reservieren würde (d. H. 200 Threads * 16 MB: 3,2 GB)?

Soweit ich aus jconsole und taskmgr ersehen kann, scheint sich der Speicherbedarf seit der Erhöhung der XSS-Einstellungen nicht wesentlich geändert zu haben, aber vielleicht fehlt mir etwas.

Jede Hilfe oder Klarstellung wäre dankbar.

[1]http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage