JavaRush /Java блогы /Random-KK /Java жадын басқару (және кодты сақтау) бойынша нұсқаулық
pandaFromMinsk
Деңгей
Минск

Java жадын басқару (және кодты сақтау) бойынша нұсқаулық

Топта жарияланған
Аудармашының ескертпесі: жазбаны аударуға деген құштарлық маусымның таңында метро вагонында жартылай ұйықтап жатып оқығаннан кейін пайда болды. Мақсатты аудитория: Java әлемінде алғашқы қадамдарын жасап жатқан адамдар және негізгі техникалық білімінің немесе қалауының сипатына байланысты Java-ның астына түсуге және барлық «электродинамикалық» процестерді үйренуге өте ынталы. Мұны оқығандар үшін бұл JVM және GC конфигурациялау әлеміне саяхаттың бастапқы нүктесі болатынына сенімдімін. Әдемі жел! Мұндағы түпнұсқа мақала әзірлеуші ​​ретінде сіз Java қолданбасындағы қателерді тазалауға және қажет жерде өнімділікке жетуге сансыз сағат жұмсайсыз. Тестілеу кезінде қолданбаның бірте-бірте баяу жұмыс істейтінін байқайсыз, соңында ол толығымен бұзылады немесе жай ғана нашар өнімділікті көрсетеді. Ақыр соңында жадтың ағып кетуін мойындаңыз. Қоқыс жинаушы Java осы ағып кетулермен күресу үшін барын салады. Бірақ мұндай жағдайларға тап болған кезде жасауға болатын нәрселер өте көп. Сізге жадтың ағып кетуіне байланысты қоңырауларды анықтау, себептерді анықтау және жалпы қолданба өнімділігіне әсер етудегі Java қоқыс жинағышының рөлін түсіну жолдары қажет.

Java жадының ағуының негізгі белгілері

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

Жадтың ағуы ретінде пайда болатын конфигурация қателері

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

Жадты бақылау құралдарының артықшылықтары

Жадты бақылау құралдары Java қолданбасының қолжетімді ресурстарды пайдалануына көбірек көрінуді қамтамасыз етеді. Осы бағдарламалық құралды пайдалану арқылы сіз жадтың ағуы және басқа өнімділік оқиғалары мәселесінің түбірін іздеуді қысқартуға қадам жасайсыз. Құралдар бірнеше санатта болады және жадтың ағып кетуімен күресіп жатсаңыз да, мәселені қалай дұрыс белгілеу керектігін және ненің дұрыс емес екенін анықтау үшін әртүрлі қолданбаларды пайдалану қажет болуы мүмкін. Үйме-дамп файлдары Java жадын талдау үшін қажетті ақпаратты береді. Бұл жағдайда екі құралды пайдалану керек: біреуі демп файлын жасау үшін, екіншісі егжей-тегжейлі талдау үшін. Бұл шешім қолданбада не болып жатқаны туралы толық ақпарат береді. Құрал ықтимал проблемалардың орнын анықтағаннан кейін және оқиғаның нақты орнын анықтау үшін аумақты тарылту үшін жұмыс істейді. Және бұл уақыт кезеңі сынақ пен қателіктің ең ұзақ және ең көп көңіл-күйді түсіретін бөлігі болып табылады. Жад анализаторы codeыңыздағы бірнеше ақауларды көрсетеді, бірақ сіз қолданбаңызда қандай мәселелерге тап болып жатқанына толық сенімді емессіз. Егер сіз әлі де бірдей қатені кездестірсеңіз, қайтадан бастаңыз және басқа ықтимал қатемен жұмыс істеңіз. Бір уақытта бір өзгерту енгізіп, қатені қайталауға тырысыңыз. Қате жағдайларын қайталау үшін қолданбаға біраз уақыт жұмыс істеуге рұқсат беру керек. Бірінші сынақ кезінде жад ағып кетсе, қолданбаны жүктеп алуды ұмытпаңыз. Қолданба деректердің аз көлемімен жақсы жұмыс істеуі мүмкін, бірақ деректердің үлкен көлемімен жұмыс істегенде қайтадан бірдей қателерді жіберуі мүмкін. Егер бірдей қате әлі де орын алса, қайта бастау керек және басқа ықтимал себеп іздеу керек. Жадты бақылау құралдары қолданба толығымен жұмыс істегеннен кейін олардың пайдалылығын дәлелдейді. Сіз JVM өнімділігін қашықтан бақылай аласыз және әзірлеуші ​​мәселені шешуге кірісіп, болашақта бағдарламалау әдістерін жақсартуға көмектесу үшін тарихи өнімділік деректерін жинамай тұрып, сәтсіздік жағдайларын алдын ала анықтай аласыз және Java ауыр жүктемеде қалай жұмыс істейтінін көре аласыз. Көптеген шешімдер «қауіпті» ескерту режимдерін немесе басқа ұқсас режимдерді қамтиды, осылайша әзірлеуші ​​​​ненің дұрыс емес екенін бірден біле алады. Әрбір әзірлеуші ​​маңызды қолданбаның өндіріс кезінде істен шығуын қаламайды және қолданбаның тоқтап қалуы кезінде ондаған немесе жүздеген мың долларды жоғалтуды қаламайды, сондықтан жадты бақылау құралдары әзірлеушінің жауап беру уақытын азайтады. Жадты бақылау қолданбалары тұтынушыға баруыңызды сұраудың орнына диагностика процесін бірден бастауға мүмкіндік береді, мұнда қандай қате орын алғанын немесе қолданбаның қандай қате codeын жасағанын ешкім айтпайды. Егер сіз Java қолданбасының жады мен өнімділік мәселелеріне жиі араласатын болсаңыз, тестілеу процесіне тереңірек үңіліңіз. Даму процесіндегі әрбір әлсіз жерді анықтап, тестілеу стратегияларын өзгертіңіз. Әріптестеріңізбен кеңесіп, тестілеу тәсілдерін бар ең жақсы тәжірибелермен салыстырыңыз. Кейде codeтың кішкене бөлігін қайта қарау керек, содан кейін бүкіл қолданбаға тұрақты әсер ету керек.

Java жады мен жадтың ағып кетуіндегі қоқыс жинаушының рөлі

Java-дағы қоқыс жинағыш қолданбаның өнімділігінде және жадты пайдалануда маңызды рөл атқарады. Ол пайдаланылмаған (өлі) an objectілерді іздейді және оларды жояды. Бұл нысандар енді жадты алмайды, сондықтан қолданбаңыз ресурс қолжетімділігін қамтамасыз етуді жалғастырады. Кейде қолданба МК-ға өлі нысандарды жою үшін жеткілікті уақыт немесе ресурстар бермейді және олар жинақталады. Сіз өлі деп есептейтін нысандарға белсенді қол жетімділік бар жағдайға тап болуыңыз мүмкін. Қоқыс жинаушы бұл туралы ештеңе істей алмайды, өйткені... оның жадты басқарудың автоматтандырылған механизмі белсенді an objectілерді айналып өтеді. Әдетте қоқыс жинағыш автономды түрде жұмыс істейді, бірақ ауыр жад мәселелеріне жауап беру үшін оның әрекетін реттеу керек. Дегенмен, GC өзі өнімділік мәселелерін тудыруы мүмкін.

GC аймақтары

Қоқыс жинағыш құрастыруды оңтайландыру үшін нысандарды әртүрлі аймақтарға бөледі. Жас ұрпақ тез өлетін нысандарды ұсынады. Қоқыс жинаушы бұл аумақта жиі тазалауға тура келген уақыттан бастап жұмыс істейді. Белгілі бір кезеңге жеткеннен кейін тірі қалған нысандар Ескі ұрпаққа беріледі. Ескі ұрпақ аймағында an objectілер ұзақ уақыт бойы қалады және коллектор жиі алып тастамайды. Дегенмен, коллектор ауқымда жұмыс істеп тұрған кезде, қолданба қоқысты тазалау үшін коллектор тірі нысандар арқылы қарайтын үлкен операциядан өтеді. Нәтижесінде қолданбалы нысандар соңғы тұрақты генерациялау аймағында орналасады. Әдетте бұл нысандар қажетті JVM метадеректерін қамтиды. Қолданба Тұрақты ұрпақта көп қоқыс жасамайды, бірақ сыныптар қажет болмаған кезде сыныптарды жою үшін коллектор қажет.

Қоқыс жинаушы мен жауап беру уақыты арасындағы байланыс

Қоқыс жинаушы қолданба ағындарының орындалу басымдығына қарамастан, аяқталуын күтпестен оларды тоқтатады. Бұл құбылыс «Әлемді тоқтату» оқиғасы деп аталады. Қоқыс жинағыштың «Жас ұрпақ» аймағы өнімділікке аздап әсер етеді, бірақ егер МК қарқынды тазалау жүргізіп жатқан болса, мәселелер байқалады. Сіз Жас буын кәмелетке толмаған МК үнемі жұмыс істейтін немесе Ескі ұрпақ бақыланbyteын күйге түсетін жағдайға тап боласыз. Мұндай жағдайда сіз Жас ұрпақ жиілігін осы коллектор аймағының көлемін ұлғайтуды талап ететін өнімділікпен теңестіруіңіз керек. Қоқыс жинағыштың Тұрақты ұрпақ және Ескі ұрпақ аймақтары қолданба өнімділігіне және жадты пайдалануға айтарлықтай әсер етеді. Бұл негізгі қоқыс тазалау операциясы өлі нысандарды шығару үшін үйінді арқылы өтеді. Процесс кішігірім құрастырудан ұзағырақ уақыт алады және өнімділік әсері ұзағырақ уақыт алуы мүмкін. Скрабтау қарқындылығы жоғары және Ескі ұрпақ аймағының өлшемі үлкен болғанда, «Әлемді тоқтату» оқиғаларына байланысты бүкіл қолданбаның өнімділігі төмендейді. Қоқыс жинауды оңтайландыру бағдарламаның қаншалықты жиі іске қосылатынын, жалпы өнімділікке әсерін бақылауды және бақылау жиілігін азайту үшін қолданба параметрлерін реттеуді қажет етеді. Қолданба орналастырудан өзін қоршаусыз бірнеше рет орналастырылған бірдей нысанды анықтау қажет болуы мүмкін немесе бүкіл жүйені ұстап тұрған қысу нүктелерін табу қажет болуы мүмкін. Тепе-теңдікті дұрыс орнату үшін процессордың жүктелуінен бастап қоқыс жинағыш циклдеріне дейін, әсіресе Жас және Кәрі ұрпақ теңгерімсіз болса, барлығына мұқият назар аударуды талап етеді. Жадтың ағып кетуін жою және қоқыс жинауды оңтайландыру Java қолданбасының жұмысын жақсартуға көмектеседі. Сіз көптеген қозғалмалы бөліктерді сөзбен жүргізесіз. Бірақ мұқият көрінуді қамтамасыз етуге арналған ақауларды жоюдың дұрыс тәсілі мен талдау құралдарының көмегімен туннельдің соңында жарыққа жетесіз. Әйтпесе, өнімділікке байланысты проблемалар туындайды. Жадты мұқият орналастыру және бақылау Java қолданбасында маңызды рөл атқарады. Қолданбаны оңтайландыру және жадтан тыс қателерді болдырмау үшін қоқыс жинау, нысанды жою және өнімділік арасындағы өзара әрекетті толық бақылауға алу керек. Бақылау құралдары әлеуетті мәселелер туралы хабардар болуға және жадты пайдалану тенденцияларын бөліп көрсетуге көмектеседі, осылайша ақаулықтарды жоюға белсенді тәсілді қолдана аласыз. Жадтың ағуы жиі ақауларды әдеттегі жолмен жоюдың тиімсіздігін көрсетеді, әсіресе конфигурация параметрінің мәндері дұрыс емес кездессе, бірақ жадқа қатысты мәселелерді шешу жолыңызда болатын оқиғаларды тез болдырмауға көмектеседі. Java жадын баптау және GC жетілдіру сіздің әзірлеу процесін айтарлықтай жеңілдетеді.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION