5.7 Механизм сборщика мусора

5.7 Механизм сборщика мусора

Сборка мусора - процесс посредством чего освобождается память, распределенная между объектам, которые больше не находятся в использовании. В другом объектно-ориентированном языке подобно С ++, это была обязанность программиста освобождать память, которая больше не требуется. В случае, если программист забывает освободить память, это может закончиться множеством проблем. Java обеспечивает уникальный подход, автоматизируя процесс сборки мусора. Это устраняет ручную сборку мусора программистом. Объект становится приемлемым на сборку мусора, если на него нет никаких ссылок или если ему было назначено нулевое значение.

Хотя мы можем вызвать сборщик мусора, вызывая метод дс () из класса или системы или во время выполнения, мы не можем предсказать или гарантировать, что сборка мусора будет иметь место.

Мы можем выключить сборку мусора в приложении,
Java -noasyncgc .....

Обратите внимание: Если мы выключаем сборку мусора, программа, как правило, будет терпеть неудачу из-за нехватки памяти в какой-то момент. Это мы можем использовать только для экспериментов.

5.7.1 Метод finalize()

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

Применяя метод finalize(), можно определять специальные действия, которые будут выполняться тогда, когда объект будет использоваться сборщиком мусора.

Его синтаксис:
protected void finalize( ) throws Throwable

Ссылки не являются собранным мусором; только объекты - собранный мусор.

Например,
Object a=new Object ();
Object b=a;
a=null;

Здесь, было бы неправильно сказать, что b - объект. Это - только ссылка на объект. Также в фрагменте кода а, хотя является нулевым указателем, также не может быть собранным мусором, потому что это все еще имеет ссылку (b). Таким образом, а все еще имеет возможность для использования в пределах программы, следовательно мусор собран не будет.

В следующем примере однако, предполагается, что никакие ссылки к существующему объекту не устанавливаются.
Object a=new Object О;
.  .  
.  .  
.  .  
a=null;

Другой пример:
Object m = new Object();
Object m=null;

Объект, созданный в начале доступен для сборки мусора.
Object m=new Object();
m = new Object (); //same.

Теперь первоначальный объект, созданный в начале, доступен для сборки мусора, и теперь существует новый объект, упомянутый как «m».

Обратите внимание: Вы можете предложить сборку мусора, но нет никакой гарантии, что это произойдёт.

Пример 7 демонстрирует использование метода сборщика мусора - gс().

Пример 7:
class GCDemo {
public static void main(String args[]) {
int i ;
long a;
Runtime r=Runtime.getRuntime();
Long values[]=new Long[200];
System.out.println( Amount of free memory is + r.freeMemory());

for(a=10000,i=0; i<200; a++,i++) {
values[i]=new Long(a);
           }
System.out.println( Amount of free memory after creating array is + r.freeMemory());
for (i=0;i<200 ; i++) {
values [i]=null;
           }
r.gc () ;
System.out.println( Amount of free memory after garbage collection is + r.freeMemory( ));
           }
}

Мы объявляем массив 200 элементов каждый типа long. Прежде, чем создаётся массив, мы определяем количество свободной памяти, доступной и отображаем это. Затем мы переходим к созданию массива и назначению значений его элементам. Сделав это, количество свободной памяти было бы уменьшено; мы определяем это количество и отображаем это. Чтобы создавать элементы массива, имеющие право на сборку мусора, мы устанавливаем их на пустой указатель. Наконец, мы вызываем сборщик мусора, снова использующий метод сборщика мусора - gc ().

Вывод показан на рисунке 5.9.

Рисунок 5.9: Вывод примера 7

назад к оглавлению вперед

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net