Open alienware14 opened 1 month ago
Garbage Collection (GC) — бұл Java виртуалды машинасы (JVM) пайдаланылмайтын жадты автоматты түрде босату үшін қолданатын механизм. GC бағдарламалаушыға жадты қолмен босатудан босатады, осылайша жадының басқару процесін жеңілдетеді және жады ағып кету (memory leaks) мен басқа да жадыға қатысты мәселелердің алдын алады. Java-дағы GC негізгі принциптері мен жұмыс істеу механизмдері:
Негізгі Принциптер
new
операторын қолданады, ал GC бұл жадты қашан және қалай босату керектігін анықтайды.GC Алгоритмдері
Mark-and-Sweep:
Generational Garbage Collection:
Java объектілерін жасы бойынша бөледі:
GC Механизмдері
GC Көтерілістер
GC Тюнинг Java-да GC жұмысын тюнингтеу үшін әртүрлі параметрлер мен флагтарды қолдануға болады:
Мысал
public class GarbageCollectionExample {
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
Object obj = new Object(); // Жаңа объект жасалады
}
// Бұл жерде GC көптеген объектілерді жоя алады, себебі оларға сілтемелер жоқ.
}
}
GC бағдарламалардың тұрақтылығын және өнімділігін жақсартуға көмектеседі, себебі жадты тиімді басқаруға мүмкіндік береді.
Java Memory Model (JMM) — бұл Java тілінде жадының жұмысы қалай ұйымдастырылғанын және көп ағынды бағдарламаларда деректердің көрінуі мен олармен манипуляция жасау ережелерін анықтайтын спецификация. JMM көп ағынды ортада деректердің тұрақтылығы мен көрінуін қамтамасыз етеді. Ол келесі негізгі аспектілерді қамтиды:
Thread Visibility (Көріну):
volatile
кілтсөзін қолданады.Atomicity (Атомарлық):
long
және double
типтерін қоспағанда) атомарлық болады.Ordering (Тәртіп):
Мысал Мысалы, егер біз екі ағынның өзара байланысқан деректермен жұмыс істегенін қарастырсақ:
Егер writer()
әдісі бір ағыннан, ал reader()
әдісі екінші ағыннан шақырылса, онда:
value
мәні 42
болуын күтеміз, бірақ JMM бойынша, бұл әрқашан орындалмайды.reader()
әдісі value
мәнін әлі жаңартылмаған күйде оқуы мүмкін.JMM осы секілді мәселелерді шешу үшін synchronized блоктары мен
volatile
айнымалыларды қолдануды ұсынады.
Қосымша мысал:
Multithreading (Көп ағындылық) — бұл бір бағдарламаның ішінде бірнеше ағындарды (threads) бір уақытта орындау мүмкіндігі. Әр ағын бағдарламаның дербес жолы болып табылады, және әрбір ағын өз тапсырмасын орындай алады. Java тілінде көп ағындылықты қолдау өте жақсы дамыған және көптеген қосымшалар өнімділікті арттыру және пайдаланушы интерфейсінің жауабын жақсарту үшін көп ағындылықты пайдаланады.
Multithreading-тің артықшылықтары
Java-да көп ағындылықты жүзеге асыру
Java-да көп ағындылықты іске асыру үшін Thread
класы немесе Runnable
интерфейсі қолданылады.
Thread
класын пайдалану
Thread
класын мұрагерлік ету арқылы жаңа ағын жасау:
Runnable
интерфейсін пайдалану
Runnable
интерфейсін іске асыру арқылы жаңа ағын жасау:
Ағындардың синхронизациясы Көп ағынды бағдарламаларда деректердің тұтастығын қамтамасыз ету үшін синхронизация қажет болуы мүмкін. Бұл бірнеше ағындардың бір ресурсты бір уақытта өзгертпейтіндігін қамтамасыз етеді.
synchronized кілтсөзі
synchronized
кілтсөзі синхронизацияланған блоктарды немесе әдістерді анықтайды.
Бұл мысалда екі ағын ортақ Counter
объектісінің increment
әдісін синхронизацияланған түрде шақырады, сондықтан count
мәні дұрыс есептеледі.
Executor Framework
Java-да көп ағындылықты басқаруды жеңілдету үшін Executor
фреймворкі қолданылады.
Көп ағындылық бағдарламалардың өнімділігін арттыруға және ресурстарды тиімді пайдалануға мүмкіндік береді, бірақ дұрыс синхронизация мен ағындардың үйлесімді жұмысын қамтамасыз ету қажет.
Virtual machine and platform services - Java виртуалды машинасы (JVM)