Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как определить размер стека потоков Hotspot VM по умолчанию

Автор вопроса: BenjaminLinusОтветов: 1

Если я запускаю java из командной строки в своем окне Windows следующим образом:

"C:\Program Files (x86)\Java\jdk1.7.0_51\bin\java.exe" -XshowSettings:all -Xss=1m -Xmx256m

Я вижу этот вывод:

VM settings:
Stack Size: 1.00M
Max. Heap Size: 256.00M
Ergonomics Machine Class: client
Using VM: Java HotSpot(TM) Client VM

Для меня важной частью является "Размер стека: 1,00 МБ", который я установил с помощью параметра командной строки "-Xss1m". Но если я удалю эту опцию и позволю виртуальной машине работать с размером стека по умолчанию, я получу следующий вывод:

VM settings:
Max. Heap Size: 256.00M
Ergonomics Machine Class: client
Using VM: Java HotSpot(TM) Client VM

Обратите внимание, что больше не отображается "Размер стека". Я надеялся, что увижу размер по умолчанию, если не укажу пользовательское значение "-Xss". Есть ли способ определить размер стека потока по умолчанию?

  • попробуй -XX:+PrintFinalFlags Peter Lawrey 09.05.2014
  • @Peter Lawrey -XX:+PrintFinalFlags - это параметр Неопознанная виртуальная машина для моего java vm. Спасибо за предложение. BenjaminLinus 09.05.2014
  • К сожалению, вам нужен другой вариант, чтобы использовать его. stackoverflow.com/questions/10486375/print-all-jvm-flags Peter Lawrey 09.05.2014
  • Ааа, теперь это показывает мне массу вещей. Когда я переключаюсь между настройками -Xss1m в командной строке, единственное значение, которое изменяется в выводе из -XX:+PrintFlagsFinal, - это ThreadStackSize, которое показывает 1024, если я устанавливаю -Xss1m, и показывает 0, если я оставляю -Xss1m. Я предполагаю, что 0 не является истинным значением по умолчанию для размера стека потоков, или я думаю, что ничего никогда не запустится. BenjaminLinus 09.05.2014

javajvmjvm-hotspot

Ответы

Ответ 1 · рейтинг 3 · apangin

Размер стека Windows-приложения по умолчанию указан в .exe заголовке файла.
Узнать его можно с помощью инструмента Cygwin objdump или с помощью утилиты Microsoft Visual Studio dumpbin:

C:\Program Files\Java\jdk1.7.0_51\bin> objdump -p java.exe | grep Stack
SizeOfStackReserve      0000000000100000
SizeOfStackCommit       0000000000001000

C:\Program Files\Java\jdk1.7.0_51\bin> dumpbin.exe /headers java.exe | grep stack
      100000 size of stack reserve
        1000 size of stack commit

Как мы видим, размер стека Java 7 x64 по умолчанию составляет 0x100000 (1 МБ).
Для версии x86 размер стека по умолчанию составляет 0x50000 (320 КБ):

C:\Program Files (x86)\Java\jre7\bin>objdump -p java.exe | grep Stack
SizeOfStackReserve      00050000
SizeOfStackCommit       00001000

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы