Sobes.tech
Middle

Java-ში რა სახის ბმულები არსებობს და რა თვისებები აქვთ?

sobes.tech AI

პასუხი AI-სგან

Java-да үш негізгі сілтеме түрі бар (сілтеме айнымалылары), олар жад жинағыштың мінез-құлқына әсер етеді:

  • Қатты сілтеме (Strong Reference)
  • Мягкий сілтеме (Soft Reference)
  • Слабый сілтеме (Weak Reference)
  • Фантом сілтеме (Phantom Reference)

Қатты сілтеме (Strong Reference)

Бұл ең кең таралған сілтеме түрі. Қатты сілтеме көрсететін объект жад жинағышпен жиналмайды, егер оған кем дегенде бір қатты сілтеме болса.

// Объект құру және оған қатты сілтеме жасау
Object myObject = new Object(); 

Мягкий сілтеме (Soft Reference)

Мягкий сілтеме объектке көрсетеді, ол жад жетіспеген жағдайда жиналуы мүмкін. Тек жұмсақ сілтемелермен көрсетілетін объектілер жиналмайды, егер жад жетіспесе. Әдетте кэштеу үшін пайдаланылады.

import java.lang.ref.SoftReference;

// Объект құру
Object data = new Object(); 
// Объектіге жұмсақ сілтеме жасау
SoftReference<Object> softRef = new SoftReference<>(data); 

// Егер жад жетіспесе, объект жиналуы мүмкін
// Егер жиналмаса, оны қайта алуға болады
Object retrievedData = softRef.get(); 

Слабый сілтеме (Weak Reference)

Слабый сілтеме объектке көрсетеді, ол жад жинағышпен кез келген уақытта жиналуы мүмкін, егер оған басқа сілтемелер болмаса. Әдетте кэштерді жүзеге асыру үшін пайдаланылады.

import java.lang.ref.WeakReference;

// Объект құру
Object cacheEntry = new Object(); 
// Объектіге әлсіз сілтеме жасау
WeakReference<Object> weakRef = new WeakReference<>(cacheEntry); 

// Объект жиналуы мүмкін
// Жиналғанын тексеру
if (weakRef.get() == null) { 
    // Объект жиналды
}

Фантом сілтеме (Phantom Reference)

Фантом сілтеме ReferenceQueue-мен бірге пайдаланылады, ол объект толық жойылмай тұрып әрекеттер жасауға мүмкіндік береді. get() әрқашан null қайтарады. Әдетте ресурстарды басқару үшін пайдаланылады.

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

// Қадағалау үшін объект құру
Object resource = new Object(); 
ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>(); 
// Фантом сілтемені құрып, оны кезекке байлау
PhantomReference<Object> phantomRef = new PhantomReference<>(resource, referenceQueue); 

// бөлек ағында referenceQueue-ны бақылауға болады
// Объект resource толық жойылуға дайын болғанда, фантом сілтеме кезекке түседі

Артықшылықтары мен салыстыру:

Сілтеме түрі Жад жинағыш get() арқылы объектіні алу Қолданылуы
Қатты сілтеме Жиналмайды Иә Қалыпты қолдану
Мягкий сілтеме Жиналуы мүмкін Иә (жиналмаса) Кэштеу (жад жетіспегенде)
Слабый сілтеме Жиналуы мүмкін Иә (жиналмаса) Кэштеу (қатты сілтемелер болмаса)
Фантом сілтеме Жиналуы мүмкін Жоқ (әрқашан null) Ресурстарды жою алдында тазалау (ReferenceQueue-пен)