Как в java хранятся статические поля класса? Знаю что был такой вопрос. (JAVA) В какой области памяти хранятся статические поля класса? Но там сказано что они хранятся в Permanent Generation. А в java 8 ведь он заменен на MetaSpace? Хранятся ли они теперь в MetaSpace? Если да, объясните пожалуйста, почему так? Ведь MetaSpace это область, в которой хранятся метаданные? А статические поля не являются же метаданными.
Ответ
А в java 8 ведь он заменен на MetaSpace?
Да, если мы говорим о HotSpot jvm.
Хранятся ли они теперь в MetaSpace?
Да
Если да, объясните пожалуйста, почему так? Ведь MetaSpace это область,
в которой хранятся метаданные?
MetaSpace - это та же PermGen, только с плюшкой в виде динамического расширения. В Permanent Generation предельный размер зависел от многих факторов: количество классов, методов, размер пула констант и т.п. Теперь размер мета пространства ограничен лишь размеров доступной памяти. Если хотим поменять, то юзаем флаг MaxMetaspaceSize
Таким образом исключили возможность выпадения java.lang.OutOfMemoryError. Ну да, если вы упрётесь в предел RAM, или в предел заданный в MaxMetaspaceSize, то исключение будет.
А статические поля не являются же метаданными.
Ммм. Если посмотреть книгу Java Data Objects, то там сказано, что статические поля - это мета данные.
Комментариев нет:
Отправить комментарий