Rambler's Top100IT • archiv

rus / eng | Логин | Комментарий к колонке | Печать | Почта | Клуб




Колонки


Вопросы и Ответы по сертификации

 
( Вячеслав Яковенко )

Q 1:

Уважаемый Вячеслав, мне кажется, что Вы не совсем правы в примере по поводу форсирования сборки мусора. Сборка мусора не может быть форсирована, данные методы лишь "советуют" виртуальной машине запустить её, но вы не можете быть уверенны, когда она запустится и запустится ли она вообще. На реальном экзамене бывает вопрос по этому поводу и правильным ответом является "Garbage collection can not be forced".

A 1:

Эта тема достаточно не однозначная и требует пояснений, но дать их очень трудно, поэтому я приведу выдержки из нескольких источников. Это позволит читателю, не только определиться с правильным ответом на экзамене, но и посмотреть на процесс garbage collection с разных точек зрения.

1. Пример экзаменационного вопроса, взятый из книги Jamie Jaworski "Java 2 Certification" стр. 166

Вопрос:

How can you force an object to be garbage collected?

Варианты ответов:

A. Invoke its finalize() method.
B. Remove all references to the object.
C. Use all memory that is available to the program.
D. You cannot force an object to be garbage collected.

Правильный ответ: D.

2. Дословная выдержка из книги: Чен М. С. Грифис С. В. Изи Э. Ф. "Программирование на JAVA: 1001 совет", Мн.: ООО "Попурри", 1997. совет 867:

867. Форсирование сборки мусора

Обычно Java сам заботится о сборке мусора. Тем не менее, бывают случаи, когда Вы только что освободили большой ресурс (присвоив значение null) и хотите, чтобы вся занятая память освободилась. В таких случаях можно использовать метод gc (сборка мусора) класса System для явного выполнения сборки мусора: System.gc();

3. Родная "солнечная" документация:

gc

public static void gc()

Runs the garbage collector.

Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects. The call System.gc() is effectively equivalent to the call: Runtime.getRuntime().gc()

Обращаю Ваше внимание на фразы: " Runs the garbage collector" и "..., the Java Virtual Machine has made a best effort ..." На мой взгляд из всего вышесказанного можно сделать следующие выводы: во-первых, метод gc() так или иначе принуждает JVM к определенным действиям по сборке мусора (иначе зачем он был бы нужен вообще); во-вторых, когда она произойдет, и произойдет ли она вообще, никто сказать точно не может.




Справка | Условия Copyright © 1999 — 2008, IT • archiv.
В начало | Логин | Комментарий к колонке | Поиск | Почта