Использование различных ссылочных типов в Java - PullRequest
4 голосов
/ 21 января 2011

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

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

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

1 Ответ

1 голос
/ 21 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...