Я встановив JDK 8 і намагаюся запустити Eclipse. Я отримую таке попередження:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Які причини ігнорування цієї опції VM?
Я встановив JDK 8 і намагаюся запустити Eclipse. Я отримую таке попередження:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Які причини ігнорування цієї опції VM?
Відповіді:
Причини ігнорування цього аргументу постійного покоління було видалено в HotSpot для JDK8 через наступні недоліки
Простір постійного покоління (PermGen) був повністю видалений і його своєрідно замінюють новим простором під назвою Metaspace. Наслідки видалення PermGen полягають у тому, що, очевидно, аргументи PermSize та MaxPermSize JVM ігноруються, і ви ніколи не отримаєте java.lang.OutOfMemoryError: PermGen.
Переваги MetaSpace
Налаштування метапростору
Максимальний розмір метапростору можна встановити за допомогою прапора -XX: MaxMetaspaceSize, а за замовчуванням необмежений, що означає, що обмеження має лише ваша системна пам'ять. Прапор налаштування -XX: MetaspaceSize визначає початковий розмір метапростору. Якщо ви не вказали цей прапор, метапростір буде динамічно змінювати розмір залежно від потреби програми під час виконання.
Зміна дозволяє в майбутньому інші оптимізації та функції
Також є покращене виконання ГК. Більш детально
Це одна з нових функцій Java 8, що є частиною пропозицій щодо вдосконалення JDK 122 :
Видаліть постійне покоління з СПГ Hotspot і, таким чином, потрібно налаштувати розмір постійного покоління.
Перелік усіх JEP, які будуть включені в Java 8, можна знайти на сторінці етапів JDK8 .
Простір перманентного покоління (PermGen) повністю видалено і його начебто замінено новим простором під назвою Metaspace. Наслідки видалення PermGen полягають у тому, що очевидно аргументи PermSize та MaxPermSize JVM ігноруються, і ви ніколи не отримаєте java.lang.OutOfMemoryError
помилку: PermGen.
Тепер JVM JDK HotSpot використовує вбудовану пам'ять для представлення метаданих класу і називається Metaspace. Детальніше >>
Тому що простір PermGen було видалено. Управління пам'яттю трохи змінилося.
Простір PermGen замінено на MetaSpace на Java 8. Аргументи PermSize та MaxPermSize JVM ігноруються і видається попередження, якщо воно присутнє при запуску.
Більшість асигнувань для метаданих класу зараз виділяються з рідної пам'яті. * Класи, які використовувались для опису метаданих класу, видалено.
Основна відмінність старого PermGen від нового MetaSpace полягає в тому, що вам не доведеться обов'язково визначати верхню межу використання пам'яті. Ви можете залишати обмеженим обмеження простору MetaSpace. Таким чином, при збільшенні використання пам'яті ви не отримаєте помилку OutOfMemoryError. Натомість зарезервована рідна пам'ять збільшується для повного заповнення збільшення використання пам'яті.
Ви можете визначити максимальну межу простору для MetaSpace, і тоді він викине простір метаданих OutOfMemoryError: Таким чином, важливо обережно визначити цю межу, щоб ми могли уникнути втрати пам’яті.
Реалізація JVM Oracle для Java 8 позбулася моделі PermGen і замінила її на Metaspace .