2012-05-15 15 views
6

mam zamiar wdrożyć aplikację na serwerze na żywo i teraz jestem w części, w której trzeba ustawić sterty i PermGen rozmiary dla JVM. Widziałem wiele artykułów i wszyscy mówili "ustaw minimalny rozmiar sterty na (pewna liczba)" i "ustaw maksymalny rozmiar sterty na (pewna liczba)", ale żaden z tych artykułów nie mówi naprawdę, dlaczego minimalny rozmiar sterty musi być ustawiony. Rozumiem powód, dla którego należy ustawić maksymalny rozmiar sterty, ale nie o minimum. Byłbym wdzięczny, gdybyś rzucił trochę światła na to.Czy naprawdę trzeba określić minimalny rozmiar sterty Java

+0

Dlaczego miałbyś ustawić dolny limit na czymkolwiek? Ponieważ Twój program może wymagać określonej kwoty. Czy nie rozumiem tego pytania? Czy to znaczy, że ustawienie min jest rzeczywiście wymagane? – keyser

+2

możliwy duplikat [Jaki jest powód ustawienia minimalnego rozmiaru sterty Java?] (Http://stackoverflow.com/questions/8085949/whats-the-reason-to-set-a-minimal-java-heap-size) – assylias

Odpowiedz

6

Stuła w Javie to ogólny obszar alokacji pamięci. Załóżmy, że ustawiamy minimalny rozmiar sterty na 1000 bajtów (jest to absurdalnie niska liczba). Teraz powiedzmy, że tworzę obiekt w moim programie, który zawiera tekst o długości dwóch tysięcy znaków. Nie mogę zapisać tego obiektu bez wcześniejszego powiększenia mojego rozmiaru sterty. Teraz prawdopodobnie mój maksymalny parametr sterty jest wystarczająco duży, aby na to pozwolić - ale to jest powód, by ustawić maksymalny rozmiar sterty.

Załóżmy jednak, że mój serwer ma 4G pamięci RAM, a ja ustawiłem minimalny rozmiar sterty na to. (Absurdalnie duża liczba). Jeśli żadne inne programy nie zajęłyby się pamięcią, działałoby to. Jeśli jednak rozpocznę drugi proces z moim programem java, to nie będzie w stanie przydzielić wystarczającej ilości pamięci i zamknąć.

Minimalna wielkość robi dwie rzeczy dla ciebie; po pierwsze, sprawia, że ​​pamięć jest dostępna szybko, aby umożliwić szybki start. Po drugie, pozwala dostroić jvm, tak abyś miał kilka niezmienników, umożliwiając przewidywanie, ile procesów możesz uruchomić. Jeśli twój minimalny rozmiar sterty jest zbyt duży, prawdopodobnie marnujesz pamięć na proces, który nigdy nie wymaga tak dużo, ograniczając pojemność twojego systemu. Jeśli ustawisz go za mało, uruchomienie programów zajmie dużo czasu, co negatywnie wpłynie na wydajność procesu.

1

Ustawianie minimalnej wielkości sterty Java pozwala przeznaczyć trochę pamięci z przodu co poprawia czas uruchamiania.

1

Ustalenie minimalnego rozmiaru jawnie (powyżej domyślnie) pomaga z fragmentacją alokacji na poziomie systemu operacyjnego i rozruchu wydajność czasową.

Java Heap jest poparta pamięci przydzielonej przez system operacyjny, tym większy początkowy blok mniej realokacja i fragmentacja, że ​​nastąpi.

Ustawianie minimum równą lub prawie równą maksymalnej, wyeliminuje te sytuacje całkowicie.

Powiązane problemy