В последнее время я много читаю о схемах выделения памяти в java, и было много сомнений, поскольку я читал из разных источников. Я собрал свои понятия, и я прошу пройти через все пункты и прокомментировать их. Я узнал, что выделение памяти является специфичным для JVM, поэтому я должен сказать заранее, что мой вопрос является специфичным для Sun.
- Классы (загружаемые загрузчиками классов) входят в специальную область в кучу: Постоянное поколение
- Вся информация, относящаяся к классу, как имя класса, массивы объектов, ассоциированные с классом, внутренние объекты, используемые JVM (например, java/lang/Object), и информация о оптимизации поступают в область постоянного поколения.
- Все статические переменные-члены снова сохраняются в области Постоянный уровень.
- Объекты идут в другую кучу: молодое поколение
- Существует только одна копия каждого метода для каждого класса, будь то статический или нестатический метод. Эта копия помещается в область постоянного поколения. Для нестатических методов все параметры и локальные переменные попадают в стек - и всякий раз, когда есть конкретный вызов этого метода, мы получаем новый связанный с ним стек-фрейм. Я не уверен, где хранятся локальные переменные статического метода. Они находятся в куче постоянного поколения? Или просто их ссылка хранится в области постоянного поколения, а фактическая копия находится где-то в другом месте (где?).
- Я также не знаю, где будет сохраняться возвращаемый тип метода.
- Если объекты (в молодом поколении) должны использовать статический член (в постоянном поколении), им предоставляется ссылка на статический член && & им предоставляется достаточное пространство памяти для хранения возвращаемого типа метода и т.д.
Благодарим вас за это!