Что такое вариант использования для мягкой ссылки в Java?

Что такое вариант использования для мягкой ссылки в Java? Было бы полезно собрать "мусор" некритические объекты, когда JVM исчерпала память для освобождения достаточного количества ресурсов, чтобы, возможно, вывести критическую информацию прежде, чем закрыть JVM?

Они призваны мягкие ссылки они, они являются мягкими и повреждаются, когда "подвергнутый напряжению" ie:the JVM исчерпал память. Я понимаю слабые ссылки и фантомные ссылки, но не действительно, когда они были бы необходимы.

14
задан Michael Myers 17 December 2010 в 19:07
поделиться

3 ответа

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

Другое использование может заключаться в сохранении изображений приложений на устройстве с ограниченным объемом памяти, таком как мобильный телефон. Когда пользователь открывает приложения, предыдущие образы приложений могут поддерживаться как мягкие ссылки, чтобы их можно было очистить, если память нужна для чего-то еще, но они все равно будут там, если нет спроса на память. Это позволит пользователю быстрее вернуться в приложение, если нет нагрузки на память, и позволит освободить память предыдущего приложения, если она нужна для чего-то еще.

20
ответ дан 1 December 2019 в 07:06
поделиться

Эта статья дала мне хорошее понимание каждого из них (слабые, мягкие и фантомные ссылки). Вот краткая цитата:

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

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

фантомная ссылка сильно отличается от SoftReference или WeakReference . Его захват объекта настолько слаб, что вы не можете даже получить объект - его метод get () всегда возвращает null . Единственное использование такой ссылки - отслеживание того, когда она помещается в очередь в ReferenceQueue , поскольку в этот момент вы знаете, что объект, на который она указывала, мертв.

16
ответ дан 1 December 2019 в 07:06
поделиться

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

3
ответ дан 1 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

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