Zainstalowałem JDK 8 i próbuję uruchomić Eclipse. Otrzymuję następujący komunikat ostrzegawczy:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Jakie są przyczyny zignorowania tej opcji maszyny wirtualnej?
Odpowiedzi:
Powody ignorowania tego argumentu to ciągłe generowanie zostało usunięte w HotSpot dla JDK8 z powodu następujących wad
Przestrzeń Permanent Generation (PermGen) została całkowicie usunięta i jest jakby zastąpiona nową przestrzenią o nazwie Metaspace. Konsekwencją usunięcia PermGen jest to, że oczywiście argumenty PermSize i MaxPermSize JVM są ignorowane i nigdy nie otrzymasz błędu java.lang.OutOfMemoryError: PermGen.
Zalety MetaSpace
Tuning Metaspace
Maksymalny rozmiar metaspace można ustawić za pomocą flagi -XX: MaxMetaspaceSize, a wartość domyślna jest nieograniczona, co oznacza, że limitem jest tylko pamięć systemowa. Flaga strojenia -XX: MetaspaceSize określa początkowy rozmiar metaspace. Jeśli nie określisz tej flagi, Metaspace zmieni rozmiar dynamicznie w zależności od zapotrzebowania aplikacji w czasie wykonywania.
Zmiana umożliwia inne optymalizacje i funkcje w przyszłości
Poprawiono także wydajność GC. Więcej szczegółów
źródło
Jest to jedna z nowych funkcji Java 8, części JDK Enhancement Propozycje 122 :
Lista wszystkich JEP, które zostaną uwzględnione w Javie 8, znajduje się na stronie kamieni milowych JDK8 .
źródło
Przestrzeń Permanent Generation (PermGen) została całkowicie usunięta i jest niejako zastąpiona nową przestrzenią o nazwie Metaspace. Konsekwencją usunięcia PermGen jest to, że oczywiście argumenty JVM PermSize i MaxPermSize są ignorowane i nigdy nie pojawi się
java.lang.OutOfMemoryError
błąd: PermGen. JVK JDK 8 HotSpot wykorzystuje teraz pamięć natywną do reprezentacji metadanych klasy i nazywa się Metaspace. Czytaj więcej >>źródło
Ponieważ przestrzeń PermGen została usunięta. Zarządzanie pamięcią nieco się zmieniło.
java-8-permgen-metaspace
źródło
Przestrzeń PermGen jest zastępowana przez MetaSpace w Javie 8. Argumenty PermSize i MaxPermSize JVM są ignorowane i generowane jest ostrzeżenie, jeśli jest obecne podczas uruchamiania.
Większość przydziałów dla metadanych klasy jest teraz przydzielana z pamięci rodzimej. * Klasy użyte do opisu metadanych klasy zostały usunięte.
Główną różnicą między starym PermGen a nowym MetaSpace jest to, że nie musisz obowiązkowo definiować górnej granicy wykorzystania pamięci. Możesz zachować nieograniczony limit miejsca MetaSpace. Zatem, gdy zwiększa się użycie pamięci, nie pojawi się błąd OutOfMemoryError. Zamiast tego zarezerwowana pamięć natywna jest zwiększana, aby w pełni wypełnić zwiększone użycie pamięci.
Możesz zdefiniować maksymalny limit miejsca dla MetaSpace, a następnie wyrzuci OutOfMemoryError: Przestrzeń metadanych. Dlatego ważne jest ostrożne określenie tego limitu, abyśmy mogli uniknąć marnotrawstwa pamięci.
źródło
Implementacja Oracle JVM dla Java 8 pozbyła się modelu PermGen i zastąpiła go Metaspace .
źródło