2013-10-12 5 views
5

JVM выделяет эти области в памяти: Область (метод) Область, куча, стек, регистр счетчика программ, собственный стек методов.Разница между областью классов и кучей

Я знаю, что куча используется для хранения объектов, а стек используется для хранения локальных переменных и частичных результатов. В соответствии с определением Область (метод) Область хранит структуры каждого класса, такие как пул постоянной среды выполнения, данные полей и методов, код методов. Но я действительно не понимаю разницы.

Может ли кто-нибудь объяснить разницу между областью классов и кучей?

+1

Должно быть пространство для хранения всех метаданных о классах и т. Д. Это не данные в вашем приложении, но они должны быть сохранены одинаково. – Aaron

ответ

9

Java 6 хранит все константы бассейн и информация класса в Перми Gen

Java 7 хранят только информацию о классе в Пермском Бытии строкового литерала бассейн находится на куче.

В Java 8 нет пермского генерала. Литературные пулы и информация о классе находятся в куче.

Вы объяснили разницу. Структуры классов, такие как методы, хранятся в perm gen. Данные в каждом экземпляре хранятся в куче.

Они были разделены, так как эти типы данных имеют очень разные жизненные циклы, например. Объекты обычно недолговечны, а классы обычно очень долговечны.

AFAIK Они удаляют его, потому что слишком много разработчиков считают его запутанным.

+1

С Java 8 можно с уверенностью сказать, что теперь нет ничего подобного области классов, поскольку определения классов также хранятся в куче. –

+1

@BalkrishanNagpal это безопасно сказать, что Metaspace нас точно так же, как Пермь, но с другим именем и настроены по-другому. Он делает то же самое. В куче кода нет кода. –

3

Класс (метод) район магазины код - это код вашей программы. Куча хранит экземпляры объектов. Например:

public void MakeSomeFruit(){ 

    Fruit myFruit=new Fruit(); 

} 
  • Код MakeSomeFruit хранится в зоне класса.
  • Выполненный экземпляр Fruit, который он создает, хранится в куче.
  • При выполнении, myFruit ссылка переменная хранится в стеке. Это всего лишь число, указывающее на местоположение экземпляра в памяти - адрес.
Смежные вопросы