JavaRush /Java Blogu /Random-AZ /Java Yaddaşının İdarə Edilməsi (və Kodunuzu Saxlamaq) üçü...
pandaFromMinsk
Səviyyə
Минск

Java Yaddaşının İdarə Edilməsi (və Kodunuzu Saxlamaq) üçün Bələdçi

Qrupda dərc edilmişdir
Tərcüməçinin qeydi: qeydi tərcümə etmək istəyi iyunun səhər tezdən onu metro vaqonunda yarıyuxulu halda oxuduqdan sonra yaranıb. Hədəf auditoriyası: Java dünyasında ilk addımlarını atan və əsas texniki biliklərinin və ya istəklərinin təbiətinə görə Java-nın kapotu altına girməyə və bütün “elektrodinamik” prosesləri öyrənməyə çox can atan insanlar. Əminəm ki, bunu oxuyanlar üçün bu, JVM və GC-nin konfiqurasiyası dünyasına səyahət üçün başlanğıc nöqtəsi olacaqdır. Ədalətli külək! Orijinal məqalə burada bir tərtibatçı olaraq, Java proqramındakı səhvləri təmizləməyə və lazım olan yerdə performans əldə etməyə saysız-hesabsız saatlar sərf edirsiniz. Test zamanı tətbiqin tədricən daha yavaş işlədiyini və sonda tamamilə çökdüyünü və ya sadəcə zəif performans göstərdiyini görürsünüz. Nəhayət, yaddaş sızmasının baş verdiyini qəbul edin. Zibil yığan Java bu sızmalarla mübarizə aparmaq üçün əlindən gələni edir. Ancaq bu kimi vəziyyətlərlə qarşılaşdıqda edilə biləcək çox şey var. Yaddaş sızması çağırışlarını müəyyən etmək, səbəbləri müəyyən etmək və ümumi proqram performansına təsir edən Java zibil toplayıcısının rolunu anlamaq üçün sizə yollar lazımdır.

Java Yaddaş Sızıntılarının Əsas Simptomları

Tətbiqin yaddaş sızması ilə bağlı problemləri olduğunu göstərən bir neçə əlamət var. Tətbiqin qəfil uğursuzluğu deyil, performansın bir qədər azalması, yalnız yaddaş sızmasını göstərir. Problem hər dəfə əməliyyat zamanı və ya yalnız proqram böyük miqdarda məlumatla işləməyə başlayanda və ya əksinə, tətbiqi miqyaslandırmağa başladıqda baş verə bilər. Sızma bütün mövcud yaddaş resurslarını sərf etdikdən sonra proqram çox güman ki, yaddaş tükənməsi xətası göstərəcək. Tətbiqi yenidən başladın və ən yaxşısına ümid edirsinizsə, sızma aradan qaldırılana qədər təkrar qəzalarla qarşılaşacaqsınız. Ümumiyyətlə, yaddaş sızması yaddaşı boşaltmaq əvəzinə obyekt istinadları yığıldıqda baş verir. Onlar bütün mövcud yaddaşı tutur və tətbiqin ehtiyac duyduğu resurslara daxil olmasını qeyri-mümkün edir.

Yaddaş sızması kimi görünən konfiqurasiya xətaları

Java yaddaş problemlərinə səbəb olan situasiyalara baxmadan və təhlil aparmazdan əvvəl araşdırmanın tamamilə başqa problemlə əlaqəli olmadığına əmin olmalısınız. Bəzi yaddaşdan kənar xətalar konfiqurasiya xətaları kimi müxtəlif səhvlər səbəbindən baş verir. Tətbiqin yığın yaddaşı az ola bilər və ya sistemdəki digər proqramlarla ziddiyyət təşkil edə bilər. Aşağı yaddaş problemləri haqqında danışmağa başlasanız, lakin sızmanın nədən qaynaqlandığını anlaya bilmirsinizsə, tətbiqə fərqli nəzər salın. Java siniflərinin təsvirlərini və bəzi əlavə məlumatların saxlanması üçün JVM yaddaşının sahəsi olan yekunlaşdırma mövzusuna dəyişikliklər etməli və ya daimi nəsil sahəsinin həcmini artırmalı olduğunuzu görəcəksiniz.

Yaddaş Monitorinq Alətlərinin Faydaları

Yaddaşın monitorinqi alətləri Java proqramının mövcud resurslardan istifadəsinə daha çox görünürlük təmin edir. Bu proqram təminatından istifadə etməklə siz yaddaş sızması və digər performans insidentləri probleminin kökündə axtarışı daraltmağa doğru addım atmış olursunuz. Alətlər bir neçə kateqoriyada təqdim olunur və yaddaş sızması ilə məşğul olsanız belə, problemi düzgün qeyd etməyi və nəyin səhv getdiyini anlamaq üçün müxtəlif proqramlardan istifadə etməli ola bilərsiniz. Yığın dump faylları Java yaddaşını təhlil etmək üçün lazımi məlumatları təmin edir. Bu halda iki vasitədən istifadə etməlisiniz: biri dump faylı yaratmaq, digəri isə ətraflı təhlil üçün. Bu həll proqramda baş verənlər haqqında ətraflı məlumat verir. Alət mümkün problemlərin yerlərini təyin etdikdən sonra hadisənin dəqiq yerini tapmaq üçün ərazini daraltmağa çalışır. Və bu müddət sınaq və səhvin ən uzun və ən üzücü hissəsinin vaxtıdır. Yaddaş analizatoru kodunuzda bir neçə problemi göstərir, lakin siz tətbiqinizin hansı problemlərlə üzləşdiyinə tam əmin deyilsiniz. Əgər hələ də eyni səhvlə qarşılaşırsınızsa, yenidən başlayın və başqa mümkün səhv üzərində işləyin. Hər dəfə bir dəyişiklik edin və səhvi təkrarlamağa çalışın. Səhv şərtlərini təkrarlamaq üçün tətbiqin bir müddət işləməsinə icazə verməlisiniz. İlk sınaq zamanı yaddaş sızması olarsa, tətbiqi sınaqdan keçirməyinizə əmin olun. Tətbiq az miqdarda məlumatla yaxşı işləyə bilər, lakin böyük miqdarda məlumatla işləyərkən yenə eyni səhvləri verə bilər. Eyni səhv hələ də baş verirsə, yenidən başlamalı və başqa mümkün səbəb axtarmalısınız. Yaddaşın monitorinqi vasitələri proqram tam işlək olduqdan sonra öz faydalılığını sübut edir. Siz JVM performansını uzaqdan izləyə və bir tərtibatçı problemə dalmazdan və gələcəkdə proqramlaşdırma üsullarını təkmilləşdirməyə kömək etmək üçün tarixi performans məlumatlarını toplamazdan və Java-nın ağır yük altında necə fəaliyyət göstərdiyini görməkdən əvvəl proaktiv olaraq uğursuzluq hallarını aşkar edə bilərsiniz. Bir çox həllər "təhlükə" xəbərdarlığı rejimlərini və ya digər oxşar rejimləri ehtiva edir ki, tərtibatçı nəyin səhv olduğunu dərhal bilsin. Hər bir tərtibatçı kritik proqramın istehsalda olarkən qəzaya uğramasını və tətbiqin dayanması zamanı onlarla və ya yüz minlərlə dollar itkisinə səbəb olmasını istəmir, beləliklə, yaddaş monitorinq alətləri tərtibatçının cavab müddətini azaldır. Yaddaş monitorinqi proqramları heç kimin sizə dəqiq olaraq hansı xətanın baş verdiyini və ya proqramın hansı xəta kodunu yaratdığını deməyəcəyi müştəriyə getməyinizi xahiş etmək əvəzinə, diaqnostika prosesinə dərhal başlamağa imkan verir. Əgər siz tez-tez Java proqramınızın yaddaş və performans problemlərinə qərq olursunuzsa, sınaq prosesinə dərindən baxın. İnkişaf prosesində hər bir zəif sahəni müəyyənləşdirin və sınaq strategiyalarınızı dəyişdirin. Həmkarlarınızla məsləhətləşin və sınaq yanaşmalarınızı mövcud ən yaxşı təcrübələrlə müqayisə edin. Bəzən kiçik bir kod parçasına yenidən baxmalı və sonra bütün tətbiqə davamlı təsir göstərməlisən.

Java Yaddaş və Yaddaş Sızmalarında Zibil Toplayıcının Rolu

Java-da Zibil Toplayıcı proqram performansında və yaddaş istifadəsində əsas rol oynayır. İstifadə edilməmiş (ölü) obyektləri axtarır və onları silir. Bu obyektlər artıq yaddaş tutmur, ona görə də tətbiqiniz resursun mövcudluğunu təmin etməyə davam edir. Bəzən proqram ölü obyektləri silmək üçün GC-yə kifayət qədər vaxt və ya resurslar vermir və onlar yığılır. Ölü olduğuna inandığınız obyektlərə aktiv girişin olduğu bir vəziyyətlə qarşılaşa bilərsiniz. Zibilyığan bu barədə heç nə edə bilməz, çünki... onun avtomatlaşdırılmış yaddaş idarəetmə mexanizmi aktiv obyektlərdən yan keçir. Adətən zibil yığan avtonom işləyir, lakin siz ciddi yaddaş problemlərinə cavab vermək üçün onun davranışını tənzimləməlisiniz. Bununla belə, GC özü performans problemlərinə səbəb ola bilər.

GC sahələri

Zibil yığan qurğu montajı optimallaşdırmaq üçün obyektləri müxtəlif sahələrə ayırır. Gənc Nəsil tez sönən obyektləri təqdim edir. Zibilyığan tez-tez təmizlənməli olduğu vaxtdan bu ərazidə işləyir. Müəyyən bir dövrə çatdıqdan sonra canlı qalan obyektlər Köhnə Nəslə ötürülür. Köhnə Nəsil ərazisində obyektlər uzun müddət qalır və kollektor tərəfindən tez-tez çıxarılmır. Bununla belə, kollektor əhatə dairəsində işləyərkən, proqram kollektorun zibilləri təmizləmək üçün canlı obyektlərə baxdığı böyük bir əməliyyatdan keçir. Nəticədə tətbiq obyektləri son daimi generasiya sahəsində yerləşir. Tipik olaraq, bu obyektlərə lazımi JVM metadata daxildir. Tətbiq Permanent Generation-da çox zibil yaratmır, lakin siniflərə ehtiyac qalmadıqda sinifləri silmək üçün kollektora ehtiyac duyur.

Zibil Toplayıcı və cavab müddəti arasında əlaqə

Zibil toplayıcı, tətbiq mövzularının icra prioritetindən asılı olmayaraq, tamamlanmasını gözləmədən onları dayandırır. Bu fenomen "Dünyanı dayandırın" hadisəsi adlanır. Zibil toplayıcının Gənc Nəsil bölgəsi performansa cüzi təsir göstərir, lakin GC intensiv təmizləmə aparırsa problemlər nəzərə çarpır. Siz Gənc Nəsil kiçik GC-nin daim işlədiyi və ya Köhnə Nəslin nəzarətsiz vəziyyətə düşdüyü bir vəziyyətə düşürsünüz. Belə bir vəziyyətdə, bu kollektor sahəsinin ölçüsünü artırmağı tələb edən performansla Gənc Nəsil tezliyini balanslaşdırmalısınız. Zibil toplayıcının Daimi Nəsil və Köhnə Nəsil bölgələri proqram performansına və yaddaş istifadəsinə əhəmiyyətli təsir göstərir. Bu böyük zibil təmizləmə əməliyyatı ölü obyektləri itələmək üçün yığından keçir. Proses kiçik bir quruluşdan daha uzun çəkir və performans təsiri daha uzun çəkə bilər. Təmizləmə intensivliyi yüksək olduqda və Köhnə Nəsil sahəsinin ölçüsü böyük olduqda, "Dünyanı dayandırın" hadisələri səbəbindən bütün tətbiqin performansı aşağı düşür. Zibil yığımını optimallaşdırmaq üçün proqramın nə qədər tez-tez işlədilməsinə, ümumi performansa təsirinə və monitorinq tezliyini azaltmaq üçün proqram parametrlərinin necə tənzimlənməsinə nəzarət tələb olunur. Tətbiq yerləşdirmədən kənarda qalmadan bir neçə dəfə yerləşdirilmiş eyni obyekti müəyyən etməli ola bilərsiniz və ya bütün sistemi geridə saxlayan sıxılma nöqtələrini tapmalı ola bilərsiniz. Balansın düzgün qurulması CPU yükündən tutmuş zibil yığan dövrlərinizə qədər hər şeyə diqqət yetirməyi tələb edir, xüsusən də Gənc və Köhnə Nəsil balanssızdırsa. Yaddaş sızıntılarının aradan qaldırılması və zibil yığımının optimallaşdırılması Java proqramının işini yaxşılaşdırmağa kömək edir. Siz sözün həqiqi mənasında çoxlu hərəkət edən hissələrlə hoqqa çıxarırsınız. Lakin ciddi görünmə təmin etmək üçün nəzərdə tutulmuş düzgün problemlərin həlli yanaşması və təhlil vasitələri ilə siz tunelin sonundakı işığa çatacaqsınız. Əks halda, performansla bağlı problemlərdən əziyyət çəkəcəksiniz. Yaddaşın diqqətli yerləşdirilməsi və monitorinqi Java proqramında mühüm rol oynayır. Tətbiqinizi optimallaşdırmaq və yaddaşdankənar xətaların qarşısını almaq üçün zibilin toplanması, obyektin utilizasiyası və performans arasında qarşılıqlı əlaqəyə tam nəzarət etməlisiniz. Monitorinq alətləri potensial problemlərdən xəbərdar olmağa və yaddaşdan istifadə tendensiyalarını vurğulamağa kömək edir ki, problemlərin aradan qaldırılmasına proaktiv yanaşasınız. Yaddaş sızması tez-tez problemlərin adi üsulla aradan qaldırılmasının səmərəsizliyini göstərir, xüsusən də yanlış konfiqurasiya parametri dəyərlərinə rast gəlsəniz, lakin yaddaşla bağlı problemlərin həlli sizə mane olan hadisələrdən tez qaçmağa kömək edə bilər. Java yaddaş tənzimləməsinin və GC-nin mükəmməlliyi inkişaf prosesinizi xeyli asanlaşdırır.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION