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

8
задан Jacob Schoen 24 August 2012 в 14:59
поделиться

7 ответов

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

3
ответ дан 5 December 2019 в 04:29
поделиться

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

4
ответ дан 5 December 2019 в 04:29
поделиться

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

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

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

0
ответ дан 5 December 2019 в 04:29
поделиться

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

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
17
ответ дан 5 December 2019 в 04:29
поделиться

Извините, но на самом деле в Java нет эквивалента "бесплатно" или "удалить".

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

42
ответ дан 5 December 2019 в 04:29
поделиться

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

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

3
ответ дан 5 December 2019 в 04:29
поделиться

«Уничтожение объекта» автоматически выполняется jvm в java, когда объект подходит для сборщика мусора.

например ..

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;
 }
}
0
ответ дан 5 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: