Как можно уничтожить объект в java

Как уничтожить объект в java?

Я столкнулся с этим вопросом в интервью со следующими вариантами:

Ответ должен быть e?

что, если e не было? тогда? ясно c не ответ. a и b будут делать gc для всего приложения (вопрос требует для одного объекта). Я думаю, что это d, потому что finalize() вызывается непосредственно перед gc (но необходимо ли после завершения gc вызывать?) Или я ошибаюсь? e должен быть там, чтобы ответить на этот вопрос?

ОТВЕТЫ

Ответ 1

Объект должен быть недоступен для получения GC. JVM будет выполнять множественные проверки и перемещать объекты из поколения в поколение, чтобы определить приемлемость GC и освобождает память, когда объекты недоступны.

Ответ 2

Чтобы выяснить, почему другие ответы не могут работать:

Ответ 3

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

В следующей статье есть много хороших подробностей о том, как управление памятью работает и не работает, и что происходит от чего. Как работают коллекторы коллекций мусора, и Спасибо за память (Понимание того, как использует JVM Родная память в Windows и Linux)

Если вы прочтете ссылки, я думаю, вы поймете, что управление памятью на Java не так просто, как вопрос с несколькими вариантами выбора.

Ответ 4

Установите значение null. Тогда больше нет ссылок, и объект станет готовым к сборке мусора. GC автоматически удалит объект из кучи.

Ответ 5

Вот код:

Ответ 6

В java нет явного способа сбора мусора. Сама JVM запускает некоторые потоки в фоновом режиме для проверки объектов, которые не имеют ссылок, что означает, что все пути, по которым мы обращаемся к объекту, теряются. С другой стороны, объект также имеет право на сбор мусора, если у него заканчивается область действия, которая является программой, в которой мы создали объект, заканчивается или заканчивается. Подойдя к вашему вопросу, метод finalize аналогичен деструктору в С++. Метод finalize фактически вызывается непосредственно перед моментом освобождения памяти объекта от JVM. Это зависит от вас, чтобы определить метод finalize или нет в вашей программе. Однако, если сборка мусора объекта выполняется после завершения программы, JVM не будет вызывать метод finalize, который вы определили в своей программе. Вы можете спросить, что такое метод finalize? Например, рассмотрим, что вы создали объект, который требует некоторого поток к внешнему файлу, и вы явно определили метод finalize для этого объекта, который проверяет поток, открытый в файл, или нет, и если он не закрывает поток. Предположим, после написания нескольких строк кода вы потеряли ссылку на объект. Затем он имеет право на сбор мусора. Когда JVM собирается освободить пространство вашего объекта, JVM просто проверит, определил ли вы метод finalize или нет и вызывает метод, поэтому нет риска открытого потока. окончательный метод делает программу свободной и более надежной.

Источник

Как удалить объект из памяти, Java?

Есть статическая ссылка на класс (объект) UserInterface

public static UserInterface user;
После закрытия в данном случае Android приложения (onDestroy метод) ссылка сохранилась в памяти как собственно и объект, из за этого в методе onCreate не сработало условие

Как удалить объект из памяти?

На данный момент на уме только поставить (user = null) в onDestroy;

Никак. Эта работа мусоросборщика. Чтобы дать ему понять что объект можно стереть из памяти нужно удалить все ссылки на него. Т.е.:

Как можно уничтожить объект в java. f254c364f5d2def7bac4825e82974b22. Как можно уничтожить объект в java фото. Как можно уничтожить объект в java-f254c364f5d2def7bac4825e82974b22. картинка Как можно уничтожить объект в java. картинка f254c364f5d2def7bac4825e82974b22

Как можно уничтожить объект в java. f254c364f5d2def7bac4825e82974b22. Как можно уничтожить объект в java фото. Как можно уничтожить объект в java-f254c364f5d2def7bac4825e82974b22. картинка Как можно уничтожить объект в java. картинка f254c364f5d2def7bac4825e82974b22

Какова вероятность запуска гербачколлектора выше: без обращения к данному методу или с обращением?

ПС: И учитесь подбирать выражения. Иначем мне придется призвать модераторов для получения ваших извинений.

@svd71 Причем тут вероятность? Вы пообещали всему интернету что вызов System.gc заставить мусоросборщик работать. Это не так, почитайте документацию.

PS Вы не политик случайно? Очень похоже: сначала обещать, а потом пугать полицией. Призывайте модераторов, надеюсь они удалят ваш ответ.

Как можно уничтожить объект в java. a86037573ed3417abb2fab1f071f6f19. Как можно уничтожить объект в java фото. Как можно уничтожить объект в java-a86037573ed3417abb2fab1f071f6f19. картинка Как можно уничтожить объект в java. картинка a86037573ed3417abb2fab1f071f6f19

Тоже задался похожим вопросом. Ранее писал на AS(Flash) там с обработчиками туго, приходиться следить самому. Сейчас в JAVA столкнулся с похожей задачей.

Пример:
Есть некий список чекбоксов, подписываюсь на изменение состояния каждого из них. Сам же список формирует модель из выбранного пользователем файла.
Вопрос:
Важно ли отписываться от каждого чекбокса в случае обновления списка или достаточно просто удалить сам чекбокс?

Просто, список полей не малый и желание оптимизировать постоянно отвлекает. Заранее спасибо!

Источник

как уничтожить объект в Java?

Я столкнулся с этим вопросом в интервью со следующими вариантами:

Ответ должен быть е?

Ответ E является правильным ответом. Если E там нет, вам скоро не хватит памяти (или) Нет правильного ответа.

Объект должен быть недоступен, чтобы иметь право на GC. JVM будет выполнять многократное сканирование и перемещение объектов из поколения в поколение, чтобы определить соответствие требованиям GC, и освобождает память, когда объекты недоступны.

Чтобы выяснить, почему другие ответы не могут работать:

Простым фактом является то, что сборщик мусора может никогда не принять решение о сборке мусора для каждого отдельного объекта, который является жизнеспособным кандидатом на сборку, если только не будет слишком высокого давления памяти. И еще есть факт, что Java так же восприимчив к утечки памяти как и любой другой язык, их просто сложнее вызывать, и, следовательно, труднее найти когда ты их вызываешь!

В следующей статье есть много хороших подробностей о том, как управление памятью работает, а что нет, и что от этого требует. Как работают сборочные сборщики мусора и Спасибо за память (Понимание того, как JVM использует собственную память в Windows и Linux)

Установите в ноль. Тогда ссылок больше не будет, и объект станет подходящим для сборки мусора. GC автоматически удалит объект из кучи.

Вот код:

В Java нет явного способа выполнить сборку мусора. JVM сама выполняет некоторые потоки в фоновом режиме, проверяя объекты, не имеющие ссылок, что означает все способы, которыми мы получаем доступ к объекту С другой стороны, объект также может быть использован для сборки мусора, если он выходит за рамки, то есть программа, в которой мы создали объект, завершается или завершается. Что касается вашего вопроса, метод finalize такой же, как деструктор в C++. Метод finalize фактически вызывается непосредственно перед моментом очистки памяти объекта JVM. Вы сами определяете метод finalize в своей программе или нет. Однако, если сборка мусора объекта выполняется после того, как программа после завершения JVM не будет вызывать метод finalize, который вы определили в своей программе. Вы можете спросить, что такое метод finalize? Например, давайте предположим, что вы создали объект, который требует некоторого потока для внешнего файла, и вы Явно определил метод finalize для этого объекта, который проверяет, открыт ли поток для файла или нет, и если нет, закрывает поток. Предположим, после написания нескольких строк кода вы потеряли ссылку на объект. Тогда он имеет право на сборку мусора. Когда JVM собирается освободить пространство вашего объекта, JVM просто проверяет, определен ли вами метод finalize или нет, и вызывает метод, чтобы не было риска открытия потока. Метод finalize делает программу без риска и более надежной.

Источник

Как уничтожить java объектов?

Ну, я разработал приложение java, использующее несколько отношений объектов, которые делают использование памяти слишком дорогим. У меня нет опыта управления памятью java, потому что дизайн приложения затрудняет уничтожение объектов и повторное использование ранее очищенного пространства. Например, я использую Шаблоны Observer и MVC.

Итак, теория говорит об этом..

Объект становится пригодным для сборки мусора или GC, если он недоступен из каких-либо живых потоков или любой статической ссылки

Другими словами, вы можете сказать, что объект становится пригодным для сборки мусора, если все его ссылки равны null.

Но, по моему короткому опыту, мне было бы слишком трудно уничтожить все ссылки на объекты, которые я хочу удалить из памяти (например, когда фрейм закрыт), когда у вас есть сценарий, подобный моему, где вы не знаете, сколько ссылок на ваши классы существует.

В соответствии с этим контекстом, как я могу иметь дело с уничтожением объекта, когда на него есть несколько ссылок? или как мне нужно управлять памятью, когда у вас есть сложные ссылки друг на друга?

5 ответов

Отслеживание

В этом контексте, как я могу справиться с уничтожением объекта, когда на него есть несколько ссылок?

Убедившись, что эти ссылки больше не нужны.

Локальные переменные, которые достигли конца своей области действия, будут иметь право на сборку мусора (как и содержащиеся в них) объекты, если они не были «linked» ни к чему другому (добавлены в коллекцию, ac omposite и т. Д.). Для объектов UI, с которыми действительно может быть трудно разобраться с точки зрения графиков объектов, убедитесь, что они правильно утилизированы или прочитали документацию, чтобы убедиться, что они будут утилизированы естественным образом.

Как можно уничтожить объект в java. ouA6H. Как можно уничтожить объект в java фото. Как можно уничтожить объект в java-ouA6H. картинка Как можно уничтожить объект в java. картинка ouA6H

«Leave [GC] Alone!!»

или как мне нужно управлять памятью, когда у вас есть сложные ссылки друг на друга?

Вы не можете «manage» память. Вы можете просто управлять ссылками. Идея состоит в том, чтобы «severe» ваши связи с вашими объектами, просто не имея ссылок на них. Затем они живут в памяти до тех пор, пока GC не уничтожит их.

Примечание для ответа на ваш комментарий

Вам действительно нужно удалить этот объект из всех списков или контейнеров, которые имеют на него ссылку (в основном, делая их «forget» об этом объекте). Как только в созданном вами объекте нет объектов «remembers» или «link», он становится одиноким элементом в графике сборщика мусора, что делает его кандидатом на удаление.

Возможно, это звучит утомительно, но если вы думаете об этом с языка, в котором вы вручную управляете памятью (C или C++, чтобы назвать наиболее очевидные ссылки 2), свободные и null-ing указатели на ваши динамически выделенные объекты действительно уничтожат их, но вам все равно нужно будет удалить элемент из списков (или любых контейнеров), иначе они будут выглядеть как пустые ведра для указателя null.

Дальнейшее Чтение

Какие есть способы, чтобы уничтожить Excel COM Interop объектов в C#, кроме этих: object_instance = null; System.GC.collect(); & System.Runtime.InteropServices.Marshal.ReleaseComObject(object); Пожалуйста, предложите только встроенные методы, а не другие инструменты, такие как bigcannon и т.

Весь смысл сборки мусора java в том, что вам ничего не нужно делать. Сбор мусора делается за вас.

Что вы могли бы сделать, так это создать один промежуточный класс. Например, если у вас есть экземпляр класса A, на который у вас много ссылок, и вы хотите удалить его, но много ссылок затрудняет это, вы можете сделать следующее: создайте экземпляр класса B, который не содержит ничего, кроме ссылки на экземпляр класса A (например, какой-то прокси). Теперь у вас будет много ссылок на экземпляр класса B, но только одна ссылка на экземпляр класса A, которую вы можете легко удалить, и сборщик мусора соберет экземпляр класса A.

Изображение показывает разницу при использовании прокси (экземпляр класса B): теперь нужно удалить только одну ссылку.

Как можно уничтожить объект в java. U7Rst. Как можно уничтожить объект в java фото. Как можно уничтожить объект в java-U7Rst. картинка Как можно уничтожить объект в java. картинка U7Rst

По большей части GC сделает это волшебство в свое время.

В случае, если у вас могут быть финализаторы (или требуется какое-то слабое вытеснение карты), например, предположительно с java.awt.Frame, вам может потребоваться слой косвенности между ресурсом и боровом памяти, который можно просто обнулить.

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

Java Spring Есть ситуация, когда я хочу проверить, существует ли уже экземпляр. Затем я хочу выгрузить / уничтожить экземпляр. Есть ли какой-нибудь способ уничтожить существующий объект? Любая.

дубликат- как уничтожить java объекта? Мой вопрос очень прост. Я новичок в разработке приложений с Java и не уверен, Нужно ли мне null объектов после того, как я закончу с ними. например, я.

Я хочу уничтожить сеанс, когда я закрываю окно, поэтому я использую код java код скрипта: php.

Я столкнулся с этим вопросом в интервью со следующими вариантами: Как уничтожить объект в java? a. System.gc(); b. Runtime.getRuntime.gc(); c. object.delete(); d. object.finalize(); e. Java performs.

Какие есть способы, чтобы уничтожить Excel COM Interop объектов в C#, кроме этих: object_instance = null; System.GC.collect(); & System.Runtime.InteropServices.Marshal.ReleaseComObject(object);.

Мы строим стратегическую игру в реальном времени на Unity и пытаемся уничтожить gameobjects на сервере и клиентах через сеть. В настоящее время игрок всегда может уничтожить свои собственные.

На очень простом примере я хочу спросить вас о сборке мусора в Java. У меня мало объектов в одном arrayList. В какой-то момент я хочу удалить один объект из arrayList и в то же время я хочу.

Я делаю игру 3d в unity, и я сделал анимацию, которая разрушает куб на куски. но маленькие кусочки Куба остаются в сцене и позже дадут некоторые проблемы с производительностью. Позже я попытался.

Источник

Удаление объекта класса в Java

Я хочу удалить этот объект, я искал, как это сделать, единственное решение, которое я нашел, было:

Но метод финализации Point не работал после того, как я это сделал. Что я могу делать?

8 ответов

Вывод: One point has been destroyed.

Объект МОЖЕТ БЫТЬ УНИЧТОЖЕН, если на этот объект не осталось указателя.

На самом деле p = null приведет только к потере ссылки на объект в куче java. Но Объект P все еще активен. Если вы используете System.gc (), вы сможете очистить все активные объекты, включая ссылку на них в куче java. Итак, я рекомендую использовать System.gc () после выполнения p = null

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

Вам не нужно уничтожать объект, сборщик мусора сделает это за вас.

GC восстанавливает объект, когда объект, на который больше нет ссылок, становится кандидатом, на который можно претендовать. Для базового приложения нельзя быть уверенным, что сборщик мусора работает в течение срока службы процесса. Итак, вот небольшой пример теории тестирования:

Если нет точки вызова методов и это не из-за проблем с управлением памятью, вы оставляете это сборщику мусора или вызываете его явно. В противном случае укажите, почему вы хотите его удалить, чтобы были предложены другие способы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *