Opcja JVM -Xss - Co dokładnie robi?


Odpowiedzi:


269

Każdy wątek w aplikacji Java ma własny stos . Stos służy do przechowywania adresów zwrotnych, argumentów wywołania funkcji / metody itp. Więc jeśli wątek ma tendencję do przetwarzania dużych struktur za pomocą algorytmów rekurencyjnych, może potrzebować dużego stosu dla wszystkich tych adresów zwrotnych i tym podobnych. Dzięki Sun JVM możesz ustawić ten rozmiar za pomocą tego parametru.


11
Tak więc opcja -Xss jest używana do ograniczenia ilości pamięci zużywanej przez stos (przez przechowywanie adresów zwrotnych, zmiennych itp.), A która pośrednio ogranicza także głębokość stosu? Mam rację?
instantsetsuna

5
@instantsetsuna: Myślę, że bardziej powszechnym zastosowaniem jest prawdopodobnie zwiększenie domyślnego limitu. (Zawsze istnieje limit.) Ale tak, kontrolujesz rozmiar stosu, który kontroluje głębokość stosu.
TJ Crowder

Jak zrobić odpowiednik tego ustawienia XSS w kompilatorze Java (aka javac)? Jest to problem dla tych, którzy korzystają z bibliotek opartych na Scali, które powodują rekurencję dużych ogonów podczas kompilacji zajęć - Andrew Norman 9 sekund temu
Andrew Norman

@AndrewNorman: Nie kompilujesz opcji środowiska wykonawczego Java do pliku klasy, jest to bardziej zależne od środowiska. Jeśli naprawdę musisz to zrobić w kodzie, możesz napisać małą główną klasę, której jedynym zadaniem jest uruchomienie prawdziwej aplikacji z potrzebnymi opcjami.
TJ Crowder,

@AndrewNorman Możesz podać flagi konfiguracji JVM, które kompilator powinien uruchomić przy użyciu -Jflagskładni (np. -J-Xss).
francoisr

166

Rzeczywiście ustawia rozmiar stosu w JVM.

Powinieneś go dotknąć w jednej z tych dwóch sytuacji:

  • StackOverflowError (rozmiar stosu jest większy niż limit), zwiększ wartość
  • OutOfMemoryError: nie można utworzyć nowego wątku macierzystego (zbyt wiele wątków, każdy wątek ma duży stos), zmniejsz go.

Ten drugi zwykle pojawia się, gdy twój Xss jest ustawiony na zbyt duży - wtedy musisz go zrównoważyć (testowanie!)


3
Niekoniecznie za każdym razem. Zarówno SOE, jak i OOME mogą wystąpić z różnych powodów, które należy naprawić inaczej.
noego

4
To prawda, ale nie powiedziałem, że -Xss jest jedyną przyczyną SOE i OOME, ale na odwrót - jeśli zostanie nieprawidłowo ustawiony, może powodować jedną z dwóch przyczyn.
Adam Adamaszek

5

Każdy wątek ma stos, który służył do zmiennych lokalnych i wartości wewnętrznych. Rozmiar stosu ogranicza głębokość połączeń. Zasadniczo nie trzeba tego zmieniać.


4

Jeśli się nie mylę, to mówi JVM, ile kolejnych wywołań przyjmie przed wydaniem StackOverflowError. Nie jest to coś, co ogólnie chcesz zmienić.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.