W szczególności, dlaczego miałby pomóc rozwiązać problem PermGen OutOfMemoryError?
Ponadto punkty bonusowe za odpowiedź, która kieruje mnie do dokumentacji argumentów JVM ...
W szczególności, dlaczego miałby pomóc rozwiązać problem PermGen OutOfMemoryError?
Ponadto punkty bonusowe za odpowiedź, która kieruje mnie do dokumentacji argumentów JVM ...
Odpowiedzi:
Stała przestrzeń to miejsce, w którym klasy, metody, internalizowane łańcuchy i podobne obiekty używane przez maszynę wirtualną są przechowywane i nigdy nie są zwalniane (stąd nazwa).
W tym artykule Oracle zwięźle przedstawiono działanie i parametryzację HotSpot GC i zaleca się powiększenie tego miejsca, jeśli załadujesz wiele klas (zwykle tak jest w przypadku serwerów aplikacji i niektórych IDE, takich jak Eclipse):
Ciągłe generowanie nie ma zauważalnego wpływu na wydajność modułu wyrzucania elementów bezużytecznych w przypadku większości aplikacji. Jednak niektóre aplikacje dynamicznie generują i ładują wiele klas; na przykład niektóre implementacje stron JavaServer Pages (JSP). Aplikacje te mogą wymagać większej stałej generacji do przechowywania dodatkowych klas. Jeśli tak, maksymalny stały rozmiar generacji można zwiększyć za pomocą opcji wiersza polecenia -XX: MaxPermSize =.
Zauważ, że w tej innej dokumentacji Oracle wymieniono inne argumenty HotSpot.
Aktualizacja: Począwszy od Java 8, zarówno przestrzeń permgen, jak i to ustawienie zniknęły. Model pamięci używany dla załadowanych klas i metod jest inny i nie jest ograniczony (z ustawieniami domyślnymi). Ten błąd nie powinien już być wyświetlany.
-XX:PermSize -XX:MaxPermSize
są używane do ustawienia rozmiaru dla generowania ciągłego.
Permanent Generation: Permanent Generation to miejsce przechowywania plików klas. Są one wynikiem skompilowanych klas i stron JSP. Jeśli to miejsce jest pełne, uruchamia pełne odśmiecanie. Jeśli funkcja pełnego odśmiecania nie może wyczyścić starych niereferencyjnych klas i nie ma już miejsca na rozszerzenie stałej przestrzeni, generowany jest błąd braku pamięci (OOME) i JVM ulega awarii.
W Javie 8 ten parametr jest powszechnie używany do drukowania komunikatu ostrzegawczego takiego jak ten:
64-bitowe ostrzeżenie maszyny wirtualnej serwera Java HotSpot ™: ignorowanie opcji MaxPermSize = 512m; wsparcie zostało usunięte w wersji 8.0
Powodem, dla którego pojawia się ten komunikat w Javie 8, jest to, że Permgen został zastąpiony przez Metaspace, aby rozwiązać niektóre z wad PermGen (jak mogłeś to zobaczyć, jedną z tych wad jest to, że miał ustalony rozmiar).
Do Twojej wiadomości: artykuł na temat Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html