Прошу прощения! Я потратил десять минут и вам вернут структуру памяти JVM.
Прошу прощения! Я потратил десять минут и вам вернут структуру памяти JVM.

Как сначала, а затем прочитайте, Брат Нэн поможет вам получить более половины ваших навыков Java.

существовать2006Сан-Франциско, КалифорнияJavaOneна конференции,Ежегодный семинар с ведущими Java-разработчиками,Sun MicrosystemsКомпания неожиданно объявила, что откроетJavaисходный код。затем,Лучшие проекты следующего годаOpenJDKрождение。

Открылись новые возможности для разработки сборщика мусора G1 в экосистеме Java, выражений Lambda в Java 8 и потокового API...

Привет всем, я брат Нэн.

Будучи лидером в изучении и развитии Java, я считаю, что вам будет полезно пройти собеседование и получить предложение о работе в той компании, которую вы хотите.

1. Схема памяти JVM

1.1 Куча памяти

По сравнению с нашими братьями, говорящими на языке C, мы, программисты на Java,,Ребята, вам не нужно писать вещи по управлению памятью.。Что конкретно??Не нужно писать громоздкий код для каждого объектасвободная памятькод。

Ниже приведен пример языка C.,CЯзык необходимо использовать явноfreeфункционировать, чтобысвободная память。

Язык кода:c
копировать
#include <stdio.h>
#include <stdlib.h>

int main() {
    // Выделить память для хранения целого числа
    int *ptr = malloc(sizeof(int));
    if (ptr == NULL) {
        printf("Ошибка выделения памяти\n");
        return 1;
    }
    // Использовать выделенную память
    *ptr = 123;
    printf("Сохраненное целое число: %d\n", *ptr);

    // После окончания использования свободная память
    free(ptr);
    return 0;
}

Мы предоставили виртуальной машине JVM самые важные полномочия по управлению памятью. Необходимо узнать больше о том, как виртуальная машина JVM управляет памятью, в том числе о том, что содержит область памяти JVM. В противном случае, если произойдет онлайн-неисправность, это произойдет. решим без понимания принципа. Идей нет.

Структура памяти JVM состоит из пяти частей: кучи памяти, стека локальных методов, стека виртуальной машины, области методов и счетчика программ. Брат Нэн нарисует картинки, которые помогут вам лучше понять.

Функция памяти Куча легко запоминается.,Его единственная цель — хранить экземпляры объектов.。переменные-членыЗначение переменной имеет базовый тип、Или ссылочные типы сохраняютсясуществовать Куча памятисередина,илокальные переменныезначение переменнойесли Если это ссылочный тип, он сохраняетсясуществовать Куча память середина. Брат Маннан продолжит говорить об этом.

Язык кода:java
копировать
public class JavaSouth {

    // переменные-члены: в Куча хранятся как базовые типы, так и ссылочные типы. памятисередина    private int memberInt = 10;
    // переменные-члены: в Куча хранятся как базовые типы, так и ссылочные типы. памятисередина    private String memberString = "Hello, World!";

    public void displayInfo() {
        // локальные переменные:если является ссылочным типом и хранится в Куча памятисередина        String localString = new String("Local String");

        System.out.println("Member int: " + memberInt);
        System.out.println("Member String: " + memberString);
        System.out.println("Local String: " + localString);
    }
}

Куча памяти JVM в стране также называется кучей GC. Говоря о переработке GC, в настоящее время основные сборщики мусора используют алгоритмы сборки поколений, а куча GC делится на новое поколение и старое поколение.

В новом и старом поколениях используются разные алгоритмы сбора мусора. Например, характеристики объектов в новом поколении — короткое время выживания, что больше подходит для алгоритма копирования, который делит память на две части; объектов в старом поколении относительно длинны. Различные большие и маленькие объекты также относительно сложны, и можно использовать алгоритмы очистки меток и алгоритмы сортировки меток. Они упомянуты в главе «Сбор мусора JVM».

1.2 Стек виртуальных машин

виртуальная машинакучаесть иJavaсерединаизметодсоответствующий,Поскольку каждый метод при выполнении потока,создам одинстек кадров,Следовательно, жизненный цикл виртуальной машины такой же, как и у потока.,Виртуальные машины также являются потокоприватными.

Кадр стека виртуальной машины включает в себя следующие элементы: таблицу локальных переменных, стек операндов, динамическую ссылку и адрес возврата метода. Трудно ли запомнить? Брат Нэн думает так.

существоватьОфициальная документация Oracleсередина,мы можем научитьсявиртуальная машинакуча Всего будет сообщеноStackOverflowErrorOutOfMemoryErrorДве аномалии。

If the computation in a thread requires a larger Java Virtual Machine stack than is permitted, the Java Virtual Machine throws a StackOverflowError. If Java Virtual Machine stacks can be dynamically expanded, and expansion is attempted but insufficient memory can be made available to effect the expansion, or if insufficient memory can be made available to create the initial Java Virtual Machine stack for a new thread, the Java Virtual Machine throws an OutOfMemoryError.

Переведено.

  • Если вычисления в потоке требуют большего значения, чем разрешено Java Виртуальная машина куча куча, потом Java виртуальная машинаброситStackOverflowError,То есть куча переполняется.
  • если Java Куча виртуальной машины может быть динамически расширена, и предпринимается попытка расширения, но недостаточно памяти для реализации расширения или недостаточно памяти для создания новой инициализации для нового потока. Java Виртуальная машина куча куча, потом Java виртуальная машинаброситOutOfMemoryError,То есть переполнение памяти.

1.3 Стек локальных методов

Функции стека локальных методов и стека виртуальной машины мало чем отличаются. Они оба предоставляют кадр стека для выполнения методов. Как мы все знаем, Java использует собственные методы языка C для многих операций, таких как математические вычисления и системные вызовы. Эти локальные методы также называются собственными методами.

Брат Нэн предоставил фрагмент кода метода Native, реализованного на языке C.

Ниже приведен внутренний метод класса String, который использует локальный метод.

Язык кода:java
копировать
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /**
     * Возвращает каноническое представление строкового объекта.
     */
    public native String intern();
}

1.4 Область метода

Следуя вышесказанному Брату Нэну, мы знаем, что стек виртуальной машины и стек локальных методов предоставляют кадры стека, а куча памяти обеспечивает область памяти. Фактически, область метода также играет роль области памяти. В области метода хранятся данные, связанные с классом: информация о структуре класса, константы, статические переменные и т. д.

существоватьОфициальная документация Oracleсередина,мы можем знатьметодпоявляется конференцияOutOfMemoryErrorаномальный。

If memory in the method area cannot be made available to satisfy an allocation request, the Java Virtual Machine throws an OutOfMemoryError.

Если в области метода недостаточно памяти для удовлетворения запроса на выделение, то Java виртуальная машинаброситOutOfMemoryError

1.5 Счетчик программ

счетчик программ Основная функция — сохранить указатель натекущая тематолькосуществоватьосуществлятьизJVMадрес инструкции。

исчетчик программа в целом памяти JVMсередина,единственный, кто не появитсяOutOfMemoryErrorобласть。

1.6 Переменное место хранения

Брат Нэн упомянул выше, что именно хранится в куче памяти и области методов. Теперь разберемся с именами переменных и местами хранения значений переменных для различных переменных Java.

Этот момент будет раскрыт, если интервьюер будет внимателен.

  1. переменные-члены
    • Имена переменных как часть класса,Его определение структуры хранитсуществоватьметодокруг
    • Является ли значение переменной базовым типом данных или ссылочным типом,Это все хранилищесуществоватьКуча памятисерединаизвнутри экземпляра объекта。
  2. переменная класса
    • Имена переменных как часть класса,Определение его структуры также сохраняетсясуществоватьметодокруг
    • Является ли значение переменной базовым типом данных или ссылочным типом,Все сохраненосуществоватьметодокругсередина,Потому что они принадлежат данным уровня класса.
  3. локальные переменные
    • локальные переменные — это переменная, присутствующая в методе,хранение имен переменныхсуществоватьвиртуальная машинакучаизстек кадровсередина。
    • Значение переменной if является базовым типом данных,Хранится в стек кадров виртуальной машины, если это ссылочный тип;,Хранение значений переменныхсуществоватькучасередина,Но ссылка указывает наиз Сам объект хранитсясуществоватьКуча памятисередина。

Нажмите здесь, «JavaSouth» — это «Расширенное руководство по изучению Java», которое охватывает основные знания, необходимые Java-программистам, и ключевые моменты собеседований.

Я Брат Нэн, Нэн — это Нэн. Я нашла ваши интересные комментарии на Get➕Like➕Follow.

Я участвую в последнем конкурсе эссе для специального учебного лагеря Tencent Technology Creation 2024. Приходите и разделите со мной приз!

Творить непросто, поэтому вы можете ставить лайки, собирать и подписываться, чтобы поддержать его. Ваша поддержка — самая большая мотивация для моего творчества.❤️

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose