Ваш стек-пожиратель кажется глючным, но это не так, если используется -O0
Кроме того, JVM на солнце может варьироваться или использовать меньше места в стеке при работе на Solaris.
Как вы ограничивали размер стека в Linux и Solaris?
Обновление: да, JVM использует различные настройки в ОС Solaris и ОС Linux:
-XX: ThreadStackSize = 512 Размер стека потока (в килобайтах). (0 означает использовать размер стека по умолчанию) [Sparc: 512; Solaris x86: 320 (ранее было 256 в 5.0 и более ранних версиях); Sparc 64 бит: 1024; Linux amd64: 1024 (было 0 в 5.0 и ранее); все остальные 0.]
Я не знаю, является ли этот параметр основным потоком, но это указывает на то, что солярис jvm будет использовать другие параметры памяти, чем linux amd64 jvm.
=== ОБНОВЛЕНИЕ2
самыми первыми операциями в JNI_CreateJavaVM являются создание потока , поскольку сама JVM имеет высокую степень потоков:
result = Threads::create_vm((JavaVMInitArgs*) args, &can_try_again);
if (result == JNI_OK) {
JavaThread *thread = JavaThread::current();
/* thread is thread_in_vm here */
*vm = (JavaVM *)(&main_vm);
Итак, поток создается в вызове CreateJavaVM
Измените глобальную переменную "CompilerThreadStackSize", потому что (!!!!!!!!! AAA Я потерял все источники, которые я добавил, чтобы ответить !!! Почему нет черновика - автосохранение при редактировании ????)
В AMD64 Linux, JVM по умолчанию имеет стек потоков компилятора 4M , а Solaris SPARC64 имеет стек потоков компиляции 2M по умолчанию. Обычные потоки получают 1M стека на Linux и 2M стека на Solaris.
Используйте 1 для ограничения размера стека компилятора в linux
-XX: CompilerThreadStackSize для настройки размера стека
значение в кб. Попробуйте установить его на 2048 в обеих ОС.