Какой метод в Java используется для уничтожения ваших объектов
Можете ли вы дать мне один пример для моего вопроса?
7 ответов
Извините, но в Java нет "свободного" или "утилизируемого" эквивалента.
Лучшее, что вы можете сделать, это просто установить объект на ноль (удаляет ссылку). Затем явно сообщите сборщику мусора, что вы собираетесь Рамбо (его где-то в java.lang.Runtime
).
Память, занятая объектами 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 # вровень () java.awt.PaintContext # Dispose () java.awt.Window # Dispose () java.io.InputStream # близко () * java.io.OutputStream # близко () * java.sql.Connection # близко () java.util.Timer # отменить () 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() * Включает подклассы
Существует не метод как таковой. finalize()
метод, определенный на верхнем уровне Object
, может вызываться, когда объект освобождается сборщиком мусора, но на это поведение нельзя положиться.
Это объясняет, как работает сборка мусора (почему вам не нужно явно удалять объекты в Java): http://web.archive.org/web/20080205091525/http://chaoticjava.com/posts/how-does-garbage-collection-work/
Проверьте это, задайте дополнительный вопрос, если это поможет.
Java не поддерживает детерминированное завершение экземпляра (т.е. деструкторы C++). В Java есть сборщик мусора, который вы вызываете (вот так Runtime.getRuntime().gc()
), но сборщики мусора имеют тенденцию работать лучше всего, когда вы оставляете очистку памяти в одиночку.
Java автоматически обрабатывает все динамическое выделение и освобождение памяти. По сути, любая память, на которую больше не ссылается именованная переменная, становится пригодной для сборки мусора (анонимных переменных нет). Это будет иметь место, когда все переменные, относящиеся к этой памяти, установлены на что-то другое или выходят из области видимости.
Сборка мусора происходит автоматически, но не существует определенного времени, когда какой-либо фрагмент памяти будет фактически освобожден.
Большинству людей не нужно знать больше этого, но ссылка, ранее размещенная corprew, дает много подробностей в интуитивно понятном формате для всех, кто хочет узнать больше.
"назначение объекта" автоматически выполняется 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;
}
}