2010-03-21 2 views
8

Можете ли вы привести мне один пример для моего вопроса?Какой метод в Java используется для уничтожения ваших объектов

+7

Есть уже много очень похожих вопросов, см http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor-in- java, http://stackoverflow.com/questions/171952/is-there-a-destructor-for-java, http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor- в-java и многие другие. Сделайте небольшой поиск перед публикацией. –

+1

Я думаю, что http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor-in-java тоже аналогичный вопрос. Не забывайте о http://stackoverflow.com/questions/2450855/how-do-you-write-a-deconstructor-in-java, либо! ;) –

+0

Java не похож на C# ... Нет такой вещи, как IDisposable.dispose(). – devinbost

ответ

3

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

3

Java не поддерживает детерминированное завершение экземпляра (т. Е. Деструкторы C++). У Java есть сборщик мусора, который может быть вызван вами (например, Runtime.getRuntime().gc()), но время, затраченное на сборку мусора, имеет тенденцию работать лучше всего, когда вы оставляете только очистку памяти.

40

Извините, но на Java нет действительно «свободного» или «распоряжающегося» эквивалента.

Лучшее, что вы можете сделать, это просто установить объект в null (удаляет ссылку). Затем явно сообщите сборщику мусора, что вы собираетесь rambo (его где-то в java.lang.Runtime).

+35

+1 для примечания Рэмбо. – cbmeeks

3

Это объясняет, как сборка мусора (почему вы не должны удалять объекты в явном виде в Java) работает: http://web.archive.org/web/20080205091525/http://chaoticjava.com/posts/how-does-garbage-collection-work/

Проверьте это, спросите следить за вопрос, если это поможет.

+2

Ссылка была разбита, и все ссылки на этом сайте нарушены.Редактировать: обновлено с помощью страницы web.archive – stanek

+1

спасибо, stanek. – corprew

0

Java автоматически обрабатывает все распределение и освобождение динамической памяти. По существу, любая память, которая больше не ссылается на именованную переменную, становится пригодной для сбора мусора (нет анонимных переменных). Это будет тот случай, когда все переменные, относящиеся к этой памяти, будут установлены на что-то еще или выходят за рамки.

Сбор мусора будет происходить автоматически, но нет конкретного времени, в течение которого любая часть памяти будет фактически освобождена.

Большинство людей не должны знать больше, но ссылка, ранее размещенная corprew, дает приятное количество деталей в интуитивно понятном формате для всех, кто интересуется обучением больше.

16

Память, занятая объектами Java, которые больше не доступны, может быть восстановлена ​​garbage collector виртуальной машины. Как отмечали другие, это автоматически. Напротив, нормальная работа программы может выделять определенные системные ресурсы, которые должны быть явно освобождены. Примером могут служить собственные ресурсы экрана. Частичное list таких методов включает все эти:

 
java.awt.Component.BltBufferStrategy#dispose() 
java.awt.Component.FlipBufferStrategy#dispose() 
java.awt.CompositeContext#dispose() 
java.awt.Graphics#dispose() 
java.awt.im.InputContext#dispose() 
java.awt.im.spi.InputMethod#dispose() 
java.awt.image.BufferStrategy#dispose() 
java.awt.Image#flush() 
java.awt.PaintContext#dispose() 
java.awt.Window#dispose() 
java.io.InputStream#close()* 
java.io.OutputStream#close()* 
java.sql.Connection#close() 
java.util.Timer#cancel() 
javax.imageio.ImageReader#dispose() 
javax.imageio.ImageWriter#dispose() 
javax.print.StreamPrintService#dispose() 
javax.security.sasl.SaslClient#dispose() 
javax.security.sasl.SaslServer#dispose() 
javax.swing.DebugGraphics#dispose() 
javax.swing.JInternalFrame#dispose() 
org.ietf.jgss.GSSContext#dispose() 
org.ietf.jgss.GSSCredential#dispose() 
* Includes subclasses 
0

«объект Destory» автоматически выполняются в JVM Явы, когда объект имеет право на сборщик мусора.

, например ..

public class gc{ 
    public static void main(String []s){ 
    gc obj=new gc(); 
    gc obj1=new gc(); 
    // if u made manually obj1=null. its eligible for garbage collection else jvm done automatically when this obj1 not in use.. 

     obj1=null; 
} 
} 
Смежные вопросы