Java не поддерживает детерминированное завершение экземпляра (т. Е. Деструкторы C ++). В Java есть сборщик мусора, который может быть вызван вами (например, этот Runtime.getRuntime (). Gc ()
), но среды выполнения со сборкой мусора, как правило, работают лучше всего, когда вы оставляете очистку памяти в покое.
Метод как таковой не существует. Метод finalize ()
, определенный в Object
, верхнего уровня, может быть вызван , когда объект освобождается сборщиком мусора, но это не поведение, на которое можно положиться.
Java автоматически обрабатывает все распределение и освобождение динамической памяти. По сути, любая память, на которую больше не ссылается именованная переменная, становится пригодной для сборки мусора (анонимных переменных нет). Это будет тот случай, когда все переменные, относящиеся к этой памяти, установлены на что-то другое или выходят за рамки.
Сборка мусора будет происходить автоматически, но нет определенного времени, когда какая-либо часть памяти будет фактически освобождена.
Большинству людей не нужно знать больше, но ссылка, ранее опубликованная corprew , дает хорошее количество деталей в интуитивно понятном формате для всех, кто хочет узнать больше.
Память, занятая объектами 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
Извините, но на самом деле в Java нет эквивалента "бесплатно" или "удалить".
Лучшее, что вы можете сделать, - это просто установить для объекта значение null (ссылка будет удалена). Затем явно сообщите сборщику мусора, что вы собираетесь использовать rambo (это где-то в java.lang.Runtime
).
Это объясняет, как работает сборка мусора (почему вам не нужно явно удалять объекты в Java): http: //web.archive. org / web / 20080205091525 / http: //chaoticjava.com/posts/how-does-garbage-collection-work/
Проверьте это, задайте дополнительный вопрос, если это поможет.
«Уничтожение объекта» автоматически выполняется 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;
}
}