Что такое сборка мусора в 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 — выделение кучи