4

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

  • Использования фантомных ссылок вместо финализаторов - Я предпочитаю это, так как есть вероятность 0 мертвого объект resherected
  • Использование слабых ссылок в хэш-карте для размещения объекта => сопоставление значений, где отображение должно быть только на месте, если объект существует в другом месте (полезно, когда необходимо добавить дополнительную информацию к объекту в библиотеке, например, источник которой не может быть изменен)
  • Использование мягких ссылок для кеширования (работает намного лучше, чем слабые ссылки, поскольку JVM поддерживает их намного дольше и только позволяет, если он чувствует это необходимо.)

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

+0

Я изначально предполагал, что это вики сообщества, но не смог найти выбор, нужно ли это делать кому-то с большим количеством разрешений или я просто толстый? – berry120

+0

Я думаю, что это возможно только для ответов. http://stackoverflow.com/privileges/community-wiki – maaartinus

+0

Я думаю, что это в значительной степени соответствует моим показаниям. Хотя я никогда не покупал идею использования soft ref для кэширования. Я бы хотел лучше контролировать политику кэширования, а не в руке GC. – irreputable

ответ

1

Две странные идеи:

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

ИМХО, в некоторых (редких) случаях слабые ссылки может быть лучше для кэширования, например, вы можете слабо относятся к значениям, которые маловероятно будут необходимы снова, как только они удаляются из структур, используя их (то есть, они становятся недоступными). Более того, в JVM есть серьезный bug относительно мягких ссылок, что может заставить вас это сделать.