JavaRush /Курстар /All lectures for KK purposes /Java-дағы қоқыс жинау

Java-дағы қоқыс жинау

All lectures for KK purposes
Деңгей , Сабақ
Қол жетімді

Java-дағы қоқыс жинауды еске түсірейік

Қоқыс жинау — бұл пайдаланылмайтын объектілерді жою арқылы орындалу ортасының жадысын қалпына келтіру процесі.

Кейде программист артық объектілерді жоюды ұмытып кетуі мүмкін, және оларға бөлінген жады босатылмайды. Жүйелік жады одан сайын көп қолданылады, және ақырында ол бөлінбейді. Мұндай қолданбалар "жад ағып кетуінен" зардап шегеді.

Бір сәтте жады жаңа объектілерді құруға жеткіліксіз болып қалады және бағдарлама OutOfMemoryError себебінен аяқталады.

Java-дағы қоқыс жинау — Java бағдарламалары жадыны автоматты түрде басқаруға мүмкіндік береді. Java бағдарламалары Java виртуалды машинасында (JVM) орындалатын байт-кодқа компиляцияланады.

Java бағдарламалары JVM-де орындалған кезде, объектілер оларға арналған жад бөлігінде құрылатын үймеде жасалады.

Java қолданбасы жұмыс істеп тұрғанда, онда жаңа объектілер құрылады. Ақыр аяғында кейбір объектілер қажет болмай қалады. Кез-келген уақытта үйме жады екі типтегі объектілерден тұрады деп айтуға болады.

  • Тірі — бұл объектілер қолданылады, оларға басқа жақтан сілтемелер бар.
  • Өлі — бұл объектілер енді еш жерде қолданылмайды, оларға сілтемелер жоқ.

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

Java-дағы қоқыс жинау — автоматты процесс. Программистке жоюға жататын объектілерді қолмен көрсету қажет емес.

Әрбір JVM қоқыс жинауды өз нұсқасында жүзеге асыра алады. Бірақ жинағыш жадыда бар объектілермен жұмыста стандартты JVM спецификациясына сәйкес келуі керек, қолжетімсіз объектілерді белгілеу немесе сәйкестендіру және оларды қысу арқылы жою.

Объектілердің қолжетімділігі

Объектіні тірі деп тану үшін — сілтемелердің болуы жеткіліксіз. Себебі, өлі объектілер басқа өлі объектілерге сілтеме жасай алады. Сондықтан барлық объектілерге болатын сілтемелердің ішінде біреуі "тірі" объектіден болуы керек.

Объектілердің қолжетімділігі

Қоқыс жинағыштар объектілерді тірі және өлі деп ажырату үшін GC Roots (қоқыс жинау тамырлары) концепциясымен жұмыс істейді. 100% тірі объектілер бар және олардан басқа объектілерді тірілтетін сілтемелер жүреді және сол сияқты.

Мұндай тамырлардың мысалдары:

  • Жүйелік класс жүктеуші жүктеген кластар.
  • Тірі ағымдар.
  • Қазіргі уақытта орындалып жатқан әдістердің параметрлері және жергілікті айнымалылар.
  • Синхронизация үшін монитор ретінде қолданылатын объектілер.
  • Кейбір мақсаттар үшін қоқыс жинаудан ұстап тұрған объектілер.
  • Қоқыс жинағыш жадыдағы барлық объектілер графын осы тамырлардан бастап, басқа объектілерге сілтемелерге қарай қарайды.

Java-дағы қоқыс жинаудың кезеңдері

Қоқыс жинаудың стандартты жүзеге асырылуы үш фазадан тұрады.

1. Объектілерді тірі деп белгілеу

Бұл кезеңде қоқыс жинағыш (GC) объектілер графын аралап, жадыдағы барлық тірі объектілерді анықтайды.

Ол объектіні көргенде, оны қолжетімді, яғни тірі деп белгілейді. GC тамырларынан қолжетімсіз барлық объектілер қоқыс жинауға арналған кандидаттар ретінде қарастырылады.

2. Өлі объектілерді тазалау

Белгілеу фазасынан кейін жады орны тірі (қаралған) немесе өлі (қаралмаған) объектілермен толтырылады. Тазарту фазасы өлі объектілер бар жады фрагменттерін босатады.

3. Жадыда қалған объектілерді тығыз орналастыру

Өлі объектілер, алдыңғы фазада жойылғандары, бір-бірінің жанында болмай, шашыраңқы болуы мүмкін. Сондықтан, сен жадтағы фрагменттелген (жартылай бос) орынды ала аласың.

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

Тығыздау процесі жаңа объектілер үшін жадты дәйекті бөлуге мүмкіндік береді.

Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION