JavaRush /Java blogi /Random-UZ /Java xotirasini boshqarish bo'yicha qo'llanma (va kodingi...
pandaFromMinsk
Daraja
Минск

Java xotirasini boshqarish bo'yicha qo'llanma (va kodingizni saqlash)

Guruhda nashr etilgan
Tarjimonning eslatmasi: eslatmani tarjima qilish istagi erta iyun kuni ertalab metro vagonida yarim uyquda o'qiganidan keyin paydo bo'ldi. Maqsadli auditoriya: Java olamida ilk qadamlarini qo'yayotgan odamlar va o'zlarining asosiy texnik bilimlari yoki xohishlariga ko'ra Java qalpog'iga kirishga va barcha "elektrodinamik" jarayonlarni o'rganishga juda intiladilar. Ishonchim komilki, buni o'qiganlar uchun bu JVM va GCni sozlash dunyosiga sayohat qilish uchun boshlang'ich nuqta bo'ladi. To'g'ri shamol! Asl maqola shu yerda , ishlab chiquvchi sifatida siz Java ilovasidagi xatolarni tozalash va kerakli joyda ishlashga ko'p soat sarflaysiz. Sinov paytida siz dastur asta-sekin sekinroq ishlayotganini va oxirida u butunlay ishdan chiqishini yoki shunchaki yomon ishlashini ko'rsatayotganini sezasiz. Oxir-oqibat, xotiraning oqishi sodir bo'lishini qabul qiling. Java axlat yig'uvchisi bu qochqinlarni bartaraf etish uchun qo'lidan kelganini qiladi. Ammo bunday vaziyatlarga duch kelganda juda ko'p narsalarni qilish mumkin. Sizga xotira oqish qo'ng'iroqlarini aniqlash, sabablarni aniqlash va Java axlat yig'uvchisining umumiy dastur ishlashiga ta'sir qilishdagi rolini tushunish usullari kerak.

Java xotirasi oqishining asosiy belgilari

Ilovada xotira sızıntısı bilan bog'liq muammolar mavjudligini ko'rsatadigan bir nechta alomatlar mavjud. To'satdan dasturning ishlamay qolishi o'rniga, unumdorlikning biroz pasayishi faqat xotira oqishini ko'rsatadi. Muammo har safar ish paytida yoki faqat dastur katta hajmdagi ma'lumotlar bilan ishlay boshlaganda yoki aksincha, siz dasturni masshtablashni boshlaysiz. Oqish barcha mavjud xotira resurslarini iste'mol qilgandan so'ng, ilova, ehtimol, xotirada xatolik ko'rsatadi. Agar siz dasturni qayta ishga tushirsangiz va eng yaxshisiga umid qilsangiz, siz oqish tuzatilgunga qadar takroriy buzilishlarga duch kelasiz. Umuman olganda, xotiraning oqishi xotirani bo'shatish o'rniga ob'ekt havolalari to'planganda sodir bo'ladi. Ular barcha mavjud xotirani egallaydi va ilovaga kerakli resurslarga kirishni imkonsiz qiladi.

Konfiguratsiya xatolari xotiraning oqishi sifatida paydo bo'ladi

Java xotirasi bilan bog'liq muammolarga olib keladigan vaziyatlarni ko'rib chiqish va tahlil qilishdan oldin, tadqiqot butunlay boshqa muammo bilan bog'liq emasligiga ishonch hosil qilishingiz kerak. Ba'zi xotirada bo'lmagan xatolar konfiguratsiya xatolari kabi turli xil xatolar tufayli yuzaga keladi. Ilovaning yig'ma xotirasi kam bo'lishi yoki tizimdagi boshqa ilovalar bilan ziddiyatli bo'lishi mumkin. Agar siz kam xotira muammolari haqida gapira boshlasangiz, lekin sizib chiqishiga nima sabab bo‘lganini tushunolmasangiz, ilovani boshqacha ko‘rib chiqing. Yakuniy bosqichga o'zgartirishlar kiritishingiz yoki Java sinflarining tavsiflarini va ba'zi qo'shimcha ma'lumotlarni saqlash uchun JVM xotirasining maydoni bo'lgan doimiy avlod maydonini ko'paytirishingiz kerakligini bilib olasiz.

Xotira monitoringi vositalarining afzalliklari

Xotira monitoringi vositalari Java dasturining mavjud resurslardan foydalanishini ko'proq ko'rish imkonini beradi. Ushbu dasturiy ta'minotdan foydalanib, siz xotiraning oqishi va boshqa ishlash hodisalari muammosining ildizini qidirishni qisqartirish uchun qadam tashlaysiz. Asboblar bir nechta toifalarga bo'linadi va siz xotiraning oqishi bilan shug'ullanayotgan bo'lsangiz ham, muammoni qanday to'g'ri belgilash va nima noto'g'ri bo'lganini aniqlash uchun turli xil ilovalardan foydalanishingiz kerak bo'lishi mumkin. Uyma dump fayllari Java xotirasini tahlil qilish uchun kerakli ma'lumotlarni taqdim etadi. Bunday holda, siz ikkita vositadan foydalanishingiz kerak: biri dump faylini yaratish uchun, ikkinchisi esa batafsil tahlil qilish uchun. Ushbu yechim ilova bilan nima sodir bo'layotgani haqida batafsil ma'lumot beradi. Asbob yuzaga kelishi mumkin bo'lgan muammolarning joylarini aniqlagandan so'ng va hodisaning aniq joyini aniqlash uchun hududni toraytirishga harakat qiladi. Va bu vaqt sinov va xatolikning eng uzoq va eng achinarli qismidir. Xotira analizatori kodingizdagi bir nechta muammolarni ko'rsatadi, lekin siz ilovangiz qanday muammolarga duch kelayotganiga to'liq ishonchingiz komil emas. Agar siz hali ham bir xil xatoga duch kelsangiz, qaytadan boshlang va boshqa mumkin bo'lgan xato ustida ishlang. Bir vaqtning o'zida bitta o'zgartirish kiriting va xatoni takrorlashga harakat qiling. Xato holatlarini takrorlash uchun ilovani biroz vaqt ishlashiga ruxsat berishingiz kerak bo'ladi. Agar birinchi sinov paytida xotira oqishi boʻlsa, ilovani sinovdan oʻtkazganingizga ishonch hosil qiling. Ilova kichik hajmdagi ma'lumotlar bilan yaxshi ishlashi mumkin, lekin katta hajmdagi ma'lumotlar bilan ishlashda yana bir xil xatolarga yo'l qo'yishi mumkin. Agar bir xil xatolik hali ham sodir bo'lsa, siz qayta boshlashingiz va boshqa mumkin bo'lgan sababni izlashingiz kerak. Xotira monitoringi vositalari ilova to‘liq ishga tushgandan so‘ng o‘z foydaliligini isbotlaydi. Siz JVM ish faoliyatini masofadan turib kuzatishingiz va ishlab chiquvchi muammoni hal qilishdan va kelajakda dasturlash usullarini yaxshilashga yordam berish uchun tarixiy ishlash maʼlumotlarini toʻplashdan va Java ogʻir yuk ostida qanday ishlashini koʻrishdan oldin nosozlik holatlarini proaktiv tarzda aniqlashingiz mumkin. Ko'pgina echimlar "xavfli" ogohlantirish rejimlarini yoki boshqa shunga o'xshash rejimlarni o'z ichiga oladi, shunda ishlab chiquvchi nima noto'g'ri ketayotganini darhol bilib oladi. Har bir ishlab chiquvchi tanqidiy dastur ishlab chiqarilayotganda ishdan chiqishini va dasturning uzilish vaqtida oʻnlab yoki yuz minglab dollar yoʻqotilishini istamaydi, shuning uchun xotira monitoringi vositalari ishlab chiquvchining javob vaqtini qisqartiradi. Xotira monitoringi ilovalari mijozga borishni so'rash o'rniga diagnostika jarayonini bir zumda boshlash imkonini beradi, bu erda hech kim sizga qanday xatolik yuz berganini yoki dastur qanday xato kodini yaratganini aniq aytib bermaydi. Agar siz tez-tez Java ilovangizning xotirasi va unumdorligi bilan bog'liq muammolarga duch kelsangiz, test jarayoniga chuqur kirib boring. Rivojlanish jarayonida har bir zaif joyni aniqlang va sinov strategiyangizni o'zgartiring. Hamkasblaringiz bilan maslahatlashing va sinov yondashuvlaringizni mavjud eng yaxshi amaliyotlar bilan solishtiring. Ba'zan siz kodning kichik qismini qayta ko'rib chiqishingiz va keyin butun dasturga doimiy ta'sir ko'rsatishingiz kerak.

Java xotirasi va xotira oqishlarida axlat yig'uvchining roli

Java-dagi axlat yig'uvchi dastur ishlashi va xotiradan foydalanishda asosiy rol o'ynaydi. U foydalanilmagan (o'lik) ob'ektlarni qidiradi va ularni o'chiradi. Ushbu ob'ektlar endi xotirani egallamaydi, shuning uchun ilovangiz resurslar mavjudligini ta'minlashda davom etadi. Ba'zan dastur GCga o'lik narsalarni olib tashlash uchun etarli vaqt yoki resurslarni bermaydi va ular to'planadi. Siz o'lik deb hisoblagan narsalarga faol kirish imkoniyati mavjud bo'lgan vaziyatga duch kelishingiz mumkin. Axlat yig'uvchi bu haqda hech narsa qila olmaydi, chunki ... uning avtomatlashtirilgan xotirani boshqarish mexanizmi faol ob'ektlarni chetlab o'tadi. Odatda axlat yig'uvchi avtonom ishlaydi, lekin siz jiddiy xotira muammolariga javob berish uchun uning xatti-harakatlarini sozlashingiz kerak. Biroq, GCning o'zi ishlash muammolariga olib kelishi mumkin.

GC hududlari

Axlat yig'uvchi moslamalarni yig'ishni optimallashtirish uchun turli sohalarga ajratadi. Yosh avlod tezda o'lib ketadigan narsalarga ega. Axlat yig'uvchi ko'pincha tozalash kerak bo'lgan paytdan boshlab bu hududda ishlaydi. Muayyan davrga etganidan keyin tirik qolgan ob'ektlar Eski avlodga o'tkaziladi. Eski avlod hududida ob'ektlar uzoq vaqt qoladi va kollektor tomonidan tez-tez olib tashlanmaydi. Biroq, kollektor miqyosda ishlayotganida, dastur katta operatsiyadan o'tadi, bu erda kollektor axlatni tozalash uchun jonli ob'ektlarni ko'rib chiqadi. Natijada, dastur ob'ektlari oxirgi doimiy generatsiya hududida joylashgan. Odatda, bu ob'ektlar kerakli JVM metama'lumotlarini o'z ichiga oladi. Ilova Doimiy avlodda juda ko'p axlat yaratmaydi, lekin sinflar endi kerak bo'lmaganda sinflarni olib tashlash uchun kollektor kerak.

Axlat yig'uvchi va javob vaqti o'rtasidagi munosabat

Chiqindilarni yig'uvchi dastur iplarining bajarilishi ustuvorligidan qat'i nazar, ularni tugatilishini kutmasdan to'xtatadi. Ushbu hodisa "Dunyoni to'xtatish" hodisasi deb ataladi. Axlat yig'uvchining Yosh avlod hududi ishlashga ozgina ta'sir qiladi, ammo agar GC intensiv tozalashni amalga oshirsa, muammolar sezilarli bo'ladi. Siz Yosh avlod kichik GC doimiy ishlayotgan yoki Eski avlod nazoratsiz holatga o'tadigan vaziyatga tushib qolasiz. Bunday vaziyatda siz Yosh avlod chastotasini ushbu kollektor maydonining hajmini oshirishni talab qiladigan ishlash bilan muvozanatlashingiz kerak. Axlat yig'uvchining Doimiy avlod va Eski avlod hududlari dastur ishlashi va xotiradan foydalanishga sezilarli ta'sir ko'rsatadi. Bu katta axlatni tozalash operatsiyasi o'lik narsalarni siqib chiqarish uchun uyumdan o'tadi. Jarayon kichik qurilishdan ko'ra ko'proq vaqt talab etadi va ishlash ta'siri uzoqroq vaqt talab qilishi mumkin. Yuvish intensivligi yuqori bo'lsa va Eski avlod maydoni katta bo'lsa, "Dunyoni to'xtating" hodisalari tufayli butun dasturning ishlashi pasayadi. Chiqindilarni yig'ishni optimallashtirish dasturning qanchalik tez-tez ishlashini, umumiy ishlashga ta'sirini va monitoring chastotasini kamaytirish uchun dastur sozlamalarini qanday sozlashni kuzatishni talab qiladi. Siz bir necha marta joylashtirilgan bir xil ob'ektni ilovadan o'zini to'sib qo'ymasdan aniqlashingiz yoki butun tizimni ushlab turadigan siqish nuqtalarini topishingiz kerak bo'lishi mumkin. Balansni to'g'ri o'rnatish uchun protsessor yuklanishidan tortib, axlat yig'ish sikllarigacha bo'lgan hamma narsaga diqqat bilan e'tibor berish kerak, ayniqsa Yosh va Keksa avlod muvozanati bo'lmasa. Xotiraning oqishini bartaraf etish va axlat yig'ishni optimallashtirish Java ilovasining ishlashini yaxshilashga yordam beradi. Siz tom ma'noda juda ko'p harakatlanuvchi qismlarni o'ynaysiz. Ammo aniq ko'rinishni ta'minlash uchun mo'ljallangan muammolarni bartaraf etishning to'g'ri yondashuvi va tahlil vositalari bilan siz tunnel oxiridagi yorug'likka erishasiz. Aks holda, ishlash bilan bog'liq muammolarga duch kelasiz. Ehtiyotkorlik bilan xotirani joylashtirish va monitoring Java dasturida muhim rol o'ynaydi. Ilovangizni optimallashtirish va xotiradan qolgan xatolarga yo'l qo'ymaslik uchun siz axlat yig'ish, ob'ektni yo'q qilish va ishlash o'rtasidagi o'zaro ta'sirni to'liq nazorat qilishingiz kerak. Monitoring vositalari sizga yuzaga kelishi mumkin bo'lgan muammolar haqida xabardor bo'lishga va xotiradan foydalanish tendentsiyalarini ta'kidlashga yordam beradi, shunda muammolarni bartaraf etishda faol yondashasiz. Xotiraning oqishi ko'pincha muammoni odatiy usul bilan bartaraf etish samarasizligini ko'rsatadi, ayniqsa siz noto'g'ri konfiguratsiya parametrlari qiymatlariga duch kelsangiz, lekin xotira bilan bog'liq muammolarni hal qilish yo'lingizda to'sqinlik qiladigan hodisalardan tezda qochishingizga yordam beradi. Java xotirasini sozlash va GCning mukammalligi ishlab chiqish jarayonini ancha osonlashtiradi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION