Как обнаружить, когда на объект больше не ссылаются

Я нашел ответ. Используйте свойство object-fit: cover в CSS, поэтому CSS будет:

.cardimg {
    height: 120px;
    width: auto;
    object-fit: cover;
}
9
задан VoidPointer 16 October 2008 в 13:29
поделиться

7 ответов

Короче говоря, нет.

Спецификация Java явно отклоняет Вас способность знать, когда последняя ссылка выпущена. Реализации JVM (и оптимизация) зависят от этого. Нет никакого рычага.

13
ответ дан 4 December 2019 в 08:54
поделиться

Проблема, "Как Вы реализуете это без чего-то содержащего ссылку на объект?"

Даже если Вы могли бы быть переданы, что проблема, говорят с сервисом, который мы назовем HandleManager, HandleManager должен был бы затем создать новую ссылку на объект, для передачи обработчику. Затем Ваш обработчик мог или (a) сохранить ссылку на него, которая перепутает HandleManager, который ожидал уничтожать не имеющий ссылки объект; или (b) выпустить ссылку, что означает, что заключительная ссылка была еще раз выпущена, что означает, что Обработчик нужно назвать снова....

2
ответ дан 4 December 2019 в 08:54
поделиться

Я думаю, что WeakReference делает то, что Вы хотите. WeakReference помещается в ReferenceQueue, как только его слабо достижимый (т.е. все сильные ссылки не стали).

См. эту статью Ethan Nicholas.

Если Вы волнуетесь по поводу некоторых ссылок, не достигающих ReferenceQueue на завершении работы, то сохраните список всех объектов созданным (использование WeakReferences или PhantomReferences). Добавьте рычаг завершения работы, который проверяет список на любые выдающиеся ссылки, и выполните любое действие, в котором Вы нуждаетесь.

4
ответ дан 4 December 2019 в 08:54
поделиться

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

Самой близкой вещью является завершить метод, который нужно назвать во время сборки "мусора", но нет никакой гарантии, что это назовут даже затем.

4
ответ дан 4 December 2019 в 08:54
поделиться

Вы могли переопределить finalize() в Вашем объекте, но это проблематично по причинам, которые упомянули другие.

Для Вашего определенного примера Вы могли смотреть на использование чего-то как File.deleteOnExit(), который удалил бы файл однажды выходы VM.

-1
ответ дан 4 December 2019 в 08:54
поделиться

Это не может быть сделано с Java - ему нужен сборщик "мусора" подсчета ссылок насколько я могу сказать. Вы рассмотрели открытие и закрытие физического файла данных Вашего объекта по мере необходимости, вместо того, чтобы сохранить это открытым в течение времени жизни объекта?

0
ответ дан 4 December 2019 в 08:54
поделиться

Если необходимо управлять внешними ресурсами как файлы, лучшим, которое можно сделать в Java, является завершение () функция (безотносительно имени, которое Вы выбираете). Можно использовать, завершают () как "пояс и подтяжки" страховой полис, но это имеет непредсказуемую синхронизацию. Таким образом, Ваша основная линия обороны должна быть завершением () функция.

См. мой ответ, Почему был бы, Вы когда-нибудь реализовывать завершаете ()?

2
ответ дан 4 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

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