Варіант JVM -Xss - що це робить саме?


Відповіді:


269

Кожен потік програми Java має власний стек . Стек використовується для зберігання зворотних адрес, аргументів виклику функції / методу тощо. Отже, якщо потік має тенденцію обробляти великі структури за допомогою рекурсивних алгоритмів, можливо, знадобиться великий стек для всіх цих повернених адрес і подібних. За допомогою Sun JVM ви можете встановити цей розмір за допомогою цього параметра.


11
Отже, опція -Xss використовується для обмеження обсягу пам'яті, яку витрачає стек (зберігаючи зворотні адреси, змінні тощо), а також опосередковано обмежує, наскільки глибокий стек може отримати? Я прав?
instantsetsuna

5
@instantsetsuna: Я думаю, що більш поширене використання, ймовірно, для збільшення ліміту за замовчуванням. (Завжди існує обмеження.) Але так, ви керуєте розміром стека, який контролює, наскільки глибокий стек може отримати.
TJ Crowder

як ви робите еквівалент цього параметра XSS на компіляторі java (він же javac)? Це питання для тих, хто використовує бібліотеки на основі масштабування, які спричиняють велику хвостову рекурсію при складанні класів - Ендрю Норман 9 секунд тому
Ендрю Норман,

@AndrewNorman: Ви не компілюєте параметри виконання Java у файлі класу, це більше стосується середовища. Якщо вам дійсно потрібно це зробити в коді, ви можете написати мініатюрний основний клас, єдиним завданням якого є запуск вашої реальної програми з потрібними вам параметрами.
TJ Crowder

@AndrewNorman Ви можете надати прапори конфігурації JVM, які компілятор повинен запускати, використовуючи -Jflagсинтаксис (наприклад, -J-Xss).
francoisr

166

Він дійсно встановлює розмір стека на JVM.

Ви повинні торкнутися його в будь-якій з цих двох ситуацій:

  • StackOverflowError (розмір стека перевищує ліміт), збільште значення
  • OutOfMemoryError: не в змозі створити новий власний потік (занадто багато потоків, кожен потік має великий стек), зменшіть його.

Останнє зазвичай відбувається, коли ваш Xss встановлений занадто великим - тоді вам потрібно його збалансувати (тестування!)


3
Не обов'язково кожен раз насправді. Як ДП, так і ОСОБА можуть виникнути через різні причини, які слід виправити по-різному.
noego

4
Щоправда, але я не сказав, що -Xss є єдиною причиною для SOE та OOME, але навпаки - якщо встановлено неправильно, це може спричинити одне з двох.
Адам Адамашек

5

Кожен потік має стек, який використовується для локальних змінних та внутрішніх значень. Розмір стека обмежує глибину ваших дзвінків. Взагалі це не те, що потрібно змінювати.


4

Якщо я не помиляюся, саме це говорить JVM, скільки послідовних дзвінків він прийме, перш ніж видавати StackOverflowError. Не те, що ти хочеш взагалі змінити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.