Что такое сборщик мусора?
Сборщик мусора — это программа, которая автоматически управляет памятью, в которой перераспределение объектов обрабатывается Java, а не программистом. В языке программирования Java динамическое размещение объектов достигается с помощью оператора new . Однажды созданный объект использует некоторую память, и память остается выделенной, пока не появятся ссылки на использование объекта.
Когда нет ссылок на объект, предполагается, что он больше не нужен, и память, занятая объектом, может быть восстановлена. Нет явной необходимости уничтожать объект, поскольку Java автоматически обрабатывает удаление.
Техника, которая выполняет это, известна как сборка мусора . Программы, которые не освобождают память, могут в конечном итоге аварийно завершить работу, если в системе не осталось памяти для выделения. Говорят, что эти программы имеют утечки памяти.
Сборка мусора в Java происходит автоматически при жизни программы, что устраняет необходимость в выделении памяти и, тем самым, предотвращает утечки памяти.
На языке Си программист несет ответственность за динамическое выделение памяти, выделенной с помощью функции 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) Примитивные типы не являются объектами. Им нельзя присвоить ноль.