Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Сборка мусора в Java: как это работает и почему это важно

Что такое сборка мусора в Java?

Сборщик мусора (Garbage Collector, GC) в Java автоматически управляет памятью, освобождая разработчиков от ручного освобождения памяти. Когда у объекта не остается живых ссылок, GC возвращает его кучу (heap), предотвращая утечки памяти, которые могут привести к сбоям приложений.

В Java объекты создаются в куче с помощью оператора new. Среда выполнения отслеживает ссылки; когда последняя ссылка исчезает, объект становится пригодным для сбора. GC периодически запускается в фоновом режиме, делая ваш код проще и безопаснее.

В отличие от C, где требуется free(), Java устраняет риск висячих указателей и неопределенного поведения, повышая надежность и безопасность.

Все объекты в Java находятся в разделе памяти heap — области, которую сканирует GC.

Практический пример: наблюдение за GC в действии

Шаг 1 — Скопируйте код ниже в редактор:

class Student {
    int a;
    int b;
    public void setData(int c, int d) {
        a = c;
        b = d;
    }
    public void showData() {
        System.out.println("Value of a = " + a);
        System.out.println("Value of b = " + b);
    }
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        s1.setData(1, 2);
        s2.setData(3, 4);
        s1.showData();
        s2.showData();
        //Student s3;
        //s3 = s2;
        //s3.showData();
        //s2 = null;
        //s3.showData();
        //s3 = null;
        //s3.showData();
    }
}

Шаг 2 — Скомпилируйте и запустите программу. Изначально создаются два объекта Student и две ссылочные переменные. См. диаграмму ниже.

Сборка мусора в Java: как это работает и почему это важно

Шаг 3 — Раскомментируйте строки 20-22, затем запустите снова. Теперь s3 указывает на тот же объект, что и s2. Диаграмма показывает, что обе ссылки указывают на один объект.

Сборка мусора в Java: как это работает и почему это важно

Шаг 4 — Раскомментируйте строки 23-24. Установка s2 в null оставляет s3 как единственную ссылку, поэтому объект всё еще жив.

Сборка мусора в Java: как это работает и почему это важно

Шаг 5 — Раскомментируйте строки 25-26. Когда и s2, и s3 установлены в null, объект становится пригодным для GC. Финальная диаграмма иллюстрирует это состояние.

Сборка мусора в Java: как это работает и почему это важно

Как сделать объект пригодным для сбора

  1. Присвойте его ссылочной переменной значение null. GC вернет память при следующем запуске.
  2. Примитивные типы (int, double и т.д.) не являются объектами и не могут быть null.

Сборка мусора в Java: как это работает и почему это важно

Примечание: явные финализаторы не рекомендуются; полагайтесь на GC.

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Интерфейсы в Java: концепции, реализация и лучшие практики
  3. Try-with-resources в Java: автоматическое управление ресурсами
  4. Аннотации в Java: типы, размещение и практические примеры
  5. Ключевое слово static в Java: переменные, методы и блоки — практические примеры
  6. Интерфейс vs Абстрактный класс в Java: Как выбрать правильную абстракцию
  7. Перегрузка конструкторов в Java — Объяснение с практическими примерами кода
  8. Java Collections Framework: полное руководство по эффективным структурам данных
  9. Java 10: интерфейс Garbage Collector и параллельный Full GC для G1
  10. Java 10: размещение кучи на NV-DIMM через -XX:AllocateHeapAt