Увеличение стекового пространства одного рабочего потока в Java

В моем веб-приложении на Java у меня есть один фоновый рабочий поток, который требует много стекового пространства, потому что он запускает действительно сложный рабочий процесс, используя механизм рабочего процесса activiti и задачи скриптов groovy.

В настоящее время мне нужно установить параметр JVM Xss до 16 МБ на 64-битной Java и Tomcat, чтобы обойти любые ошибки StackOverflowErrors. Если возникает ошибка, трассировка стека действительно огромна (несколько сотен строк), но все это происходит внутри движка, поэтому я ничего не могу с этим поделать.

Теперь мой вопрос: есть ли способ увеличить размер стека одного потока во время выполнения?

Я хотел бы снизить настройки Xss по умолчанию для JVM для всех потоков в приложении до 512 КБ, что, как я знаю, достаточно, и запускать рабочий только с 16 МБ.

Java API предоставляет некоторую информацию по этой теме для конструктора класса Thread:

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

но он упоминает, что поведение не гарантировано ([1]), и я не нашел никакой информации, если бы он работал на окнах.

Кроме того, если пространство стека одного потока не может быть увеличено, и мне нужно указать 16 МБ в качестве значения по умолчанию, каковы будут последствия такого высокого значения? Означает ли это, что каждый новый поток будет резервировать 16 МБ памяти при инициализации (то есть 200 потоков * 16 МБ: 3,2 ГБ)?

Насколько я могу судить по jconsole и taskmgr, объем памяти не сильно изменился с момента увеличения настроек Xss, но, возможно, я что-то упустил.

Любая помощь или разъяснения будут оценены.

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

Ответы на вопрос(2)

Ваш ответ на вопрос