В Java существуют сильные (strong), мягкие (soft), слабые (weak) и призрачные (phantom) ссылки.
Сильная ссылка:
- Присваивается обычным способом.
- Объект, на который ссылается сильная ссылка, не будет собран сборщиком мусора, пока на него есть хотя бы одна сильная ссылка.
java
Мягкая ссылка (SoftReference):
- Объект, на который ссылается мягкая ссылка, может быть собран сборщиком мусора только в том случае, если системе не хватает памяти.
- Часто используются для реализации кэшей.
java
Слабая ссылка (WeakReference):
- Объект, на который ссылается слабая ссылка, может быть собран сборщиком мусора в любой момент, как только на него не останется сильных ссылок.
- Используются для предотвращения утечек памяти, например, при хранении слушателей или контекстов.
java
Призрачная ссылка (PhantomReference):
- Объект, на который ссылается призрачная ссылка, не будет собран сборщиком мусора до тех пор, пока все призрачные ссылки на него не будут очищены.
- Нельзя получить доступ к объекту через
get()
.
- Используются в сочетании с
ReferenceQueue
для выполнения действий после того, как объект станови
В Java существуют сильные (strong), мягкие (soft), слабые (weak) и призрачные (phantom) ссылки.
Сильная ссылка:
- Присваивается обычным способом.
- Объект, на который ссылается сильная ссылка, не будет собран сборщиком мусора, пока на него есть хотя бы одна сильная ссылка.
java
Мягкая ссылка (SoftReference):
- Объект, на который ссылается мягкая ссылка, может быть собран сборщиком мусора только в том случае, если системе не хватает памяти.
- Часто используются для реализации кэшей.
java
Слабая ссылка (WeakReference):
- Объект, на который ссылается слабая ссылка, может быть собран сборщиком мусора в любой момент, как только на него не останется сильных ссылок.
- Используются для предотвращения утечек памяти, например, при хранении слушателей или контекстов.
java
Призрачная ссылка (PhantomReference):
- Объект, на который ссылается призрачная ссылка, не будет собран сборщиком мусора до тех пор, пока все призрачные ссылки на него не будут очищены.
- Нельзя получить доступ к объекту через
get()
.
- Используются в сочетании с
ReferenceQueue
для выполнения действий после того, как объект станови