alienware14 / javaLessons

Java SE үйрену
The Unlicense
0 stars 0 forks source link

Virtual machine and platform services - Java виртуалды машинасы (JVM) #1

Open alienware14 opened 1 month ago

alienware14 commented 1 month ago

Virtual machine and platform services - Java виртуалды машинасы (JVM)

Capture
alienware14 commented 1 month ago

Garbage Collection (GC)

Garbage Collection (GC) — бұл Java виртуалды машинасы (JVM) пайдаланылмайтын жадты автоматты түрде босату үшін қолданатын механизм. GC бағдарламалаушыға жадты қолмен босатудан босатады, осылайша жадының басқару процесін жеңілдетеді және жады ағып кету (memory leaks) мен басқа да жадыға қатысты мәселелердің алдын алады. Java-дағы GC негізгі принциптері мен жұмыс істеу механизмдері:

Негізгі Принциптер

  1. Автоматты Жад Басқару: Бағдарламалаушы жадты бөлу үшін new операторын қолданады, ал GC бұл жадты қашан және қалай босату керектігін анықтайды.
  2. Объектілердің Жарамсыздығы: Объектілерге сілтеме жасалмаған кезде олар жарамсыз болып саналады және GC оларды жоюы мүмкін.
  3. Жадты Босату: GC жарамсыз объектілерді жояды және бұл жадты қайтадан пайдалануға қолжетімді етеді.

GC Алгоритмдері

  1. Mark-and-Sweep:

    • Белгілеу (Marking): GC барлық қолданылатын (жеткізу мүмкін) объектілерді белгілейді.
    • Сыпыру (Sweeping): Белгіленбеген объектілер жойылады, және олардың жад аймағы босатылады.
  2. Generational Garbage Collection:

    Java объектілерін жасы бойынша бөледі:

    • Young Generation: Жаңа объектілер сақталады. Бұл жиі тазартылатын аймақ.
    • Old Generation: Ұзақ уақыт қолданылған объектілер сақталады. Бұл сирек тазартылатын аймақ.
    • Permanent Generation (PermGen): Класстар мен әдістердің метадеректері сақталады (Java 8-ге дейін).
    • Metaspace: Java 8 және одан кейінгі нұсқаларда класстар мен әдістердің метадеректері сақталады.

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 бағдарламалардың тұрақтылығын және өнімділігін жақсартуға көмектеседі, себебі жадты тиімді басқаруға мүмкіндік береді.

alienware14 commented 1 month ago

Java Memory Model (JMM)

Java Memory Model (JMM) — бұл Java тілінде жадының жұмысы қалай ұйымдастырылғанын және көп ағынды бағдарламаларда деректердің көрінуі мен олармен манипуляция жасау ережелерін анықтайтын спецификация. JMM көп ағынды ортада деректердің тұрақтылығы мен көрінуін қамтамасыз етеді. Ол келесі негізгі аспектілерді қамтиды:

Thread Visibility (Көріну):

Atomicity (Атомарлық):

Ordering (Тәртіп):

Мысал Мысалы, егер біз екі ағынның өзара байланысқан деректермен жұмыс істегенін қарастырсақ:

Capture

Егер writer() әдісі бір ағыннан, ал reader() әдісі екінші ағыннан шақырылса, онда:

JMM осы секілді мәселелерді шешу үшін synchronized блоктары мен volatile айнымалыларды қолдануды ұсынады.

Қосымша мысал: CaptureCapture

alienware14 commented 1 month ago

Multithreading (Көп ағындылық)

Multithreading (Көп ағындылық) — бұл бір бағдарламаның ішінде бірнеше ағындарды (threads) бір уақытта орындау мүмкіндігі. Әр ағын бағдарламаның дербес жолы болып табылады, және әрбір ағын өз тапсырмасын орындай алады. Java тілінде көп ағындылықты қолдау өте жақсы дамыған және көптеген қосымшалар өнімділікті арттыру және пайдаланушы интерфейсінің жауабын жақсарту үшін көп ағындылықты пайдаланады.

Multithreading-тің артықшылықтары

  1. Жылдамдық: Бірнеше тапсырмаларды бір уақытта орындау бағдарламаның жалпы өнімділігін арттыруы мүмкін.
  2. Ресурстарды тиімді пайдалану: Процессорлар мен басқа ресурстар толық қолданылады.
  3. Жауаптылық: Пайдаланушы интерфейсінің жауаптылығын сақтай отырып, фондық тапсырмаларды орындауға болады.
  4. Кешіктіріп өңдеу: Фондық тапсырмаларды негізгі ағынға кедергі келтірмей орындау мүмкіндігі.

Java-да көп ағындылықты жүзеге асыру Java-да көп ағындылықты іске асыру үшін Thread класы немесе Runnable интерфейсі қолданылады.

  1. Thread класын пайдалану Thread класын мұрагерлік ету арқылы жаңа ағын жасау:

    C1
  2. Runnable интерфейсін пайдалану Runnable интерфейсін іске асыру арқылы жаңа ағын жасау:

    C2

Ағындардың синхронизациясы Көп ағынды бағдарламаларда деректердің тұтастығын қамтамасыз ету үшін синхронизация қажет болуы мүмкін. Бұл бірнеше ағындардың бір ресурсты бір уақытта өзгертпейтіндігін қамтамасыз етеді.

synchronized кілтсөзі synchronized кілтсөзі синхронизацияланған блоктарды немесе әдістерді анықтайды.

C3 C4

Бұл мысалда екі ағын ортақ Counter объектісінің increment әдісін синхронизацияланған түрде шақырады, сондықтан count мәні дұрыс есептеледі.

Executor Framework Java-да көп ағындылықты басқаруды жеңілдету үшін Executor фреймворкі қолданылады.

Capture

Көп ағындылық бағдарламалардың өнімділігін арттыруға және ресурстарды тиімді пайдалануға мүмкіндік береді, бірақ дұрыс синхронизация мен ағындардың үйлесімді жұмысын қамтамасыз ету қажет.