Что такое сборка мусора в Java?
Что такое сборка мусора в Java?
Сборка мусора в Java это процесс, с помощью которого программы автоматически выполняют управление памятью. Сборщик мусора (GC) находит неиспользуемые объекты и удаляет их, чтобы освободить память. В Java динамическое выделение памяти для объектов достигается с помощью оператора new, который использует часть памяти, и память остается выделенной до тех пор, пока не появятся ссылки на использование объекта.
При отсутствии ссылок на объект считается, что он больше не нужен, и память, занятая объектом, может быть освобождена. Нет явной необходимости уничтожать объект, так как Java автоматически обрабатывает освобождение.
Техника, с помощью которой это достигается, называется сборкой мусора. . Программы, которые не освобождают память, могут в конечном итоге аварийно завершать работу, когда в системе не остается памяти для выделения. Говорят, что эти программы имеют утечки памяти.
Сборка мусора в Java происходит автоматически во время жизненного цикла программы, устраняя необходимость в освобождении памяти и тем самым избегая утечек памяти.
В языке C ответственность за освобождение памяти, выделенной динамически с помощью функции free(), лежит на программисте. Вот к чему ведет управление памятью Java.
Примечание. Все объекты создаются в кучке. Раздел памяти. Подробнее об этом в одном из последующих руководств.
Пример:изучение механизма сборщика мусора в Java
Шаг 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) Сохраните, скомпилируйте и запустите код. Как показано на диаграмме, создаются два объекта и две ссылочные переменные.
Шаг 3) Раскомментируйте строки # 20,21,22. Сохраните, скомпилируйте и запустите код.
Шаг 4) Как показано на диаграмме ниже, две ссылочные переменные указывают на один и тот же объект.
Шаг 5) Раскомментируйте строки № 23 и 24. Скомпилируйте, сохраните и запустите код
Шаг 6) Как показано на диаграмме ниже, s2 становится нулевым, но s3 по-прежнему указывает на объект и не подходит для сборки мусора Java.
Шаг 7) Раскомментируйте строки № 25 и 26. Сохраните, скомпилируйте и запустите код
Шаг 8) В этот момент нет ссылок, указывающих на объект, и он становится пригодным для сборки мусора. Он будет удален из памяти, и восстановить его будет невозможно.
Как удалить объект в Java?
1) Если вы хотите, чтобы ваш объект подходил для сборки мусора, присвойте его ссылочной переменной значение null.
2) Примитивные типы не являются объектами. Им нельзя присвоить значение null.
java
- Операторы Java
- Java-интерфейс
- Java-проба с ресурсами
- Java-аннотации
- Статическая переменная в Java:что такое статический блок и метод [пример]
- Интерфейс против абстрактного класса в Java:в чем разница?
- Перегрузка конструктора в Java:что это такое и примеры программ
- Java — структура коллекций
- Java 10 — расширенная сборка мусора
- Java 10 — выделение кучи