Ankara
0 (312) 276 75 93
info@billgatesweb.com

Bellek Sızıntılarını Bulmak – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları

Web Danışmanlık Hizmeti, Seo Hizmeti Al, Mobile Uygulama Yaptır, Back Link Satın Al, Blog Yazdırmak İstiyorum, Makale YAZDIRMA siteleri, Parayla makale YAZDIRMA, Seo makale fiyatları, Sayfa başı yazı yazma ücreti, İngilizce makale yazdırma, Akademik makale YAZDIRMA, Makale Fiyatları 2022, Makale yazma, Blog Yazdırma, Akademik Danışmanlık, Tercüme Danışmanlık & 0 (312) 276 75 93

Bellek Sızıntılarını Bulmak – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları

Kampanya Yönetimi

Bellek Sızıntılarını Bulmak ve Düzeltmek 

Java uygulamalarında bellek sızıntısı olması artık bir yenilik değil. Bunlar, C++ gibi daha düşük seviyeli dilleri karıştıran sızıntıların aynı türü değildir, ancak yine de sızıntılardır çünkü ayrılan bellek, boş havuza geri salınmaz. Daha önce öğrendiğiniz gibi, Java çöp toplama, erişilemeyen nesneler tarafından tutulan belleği serbest bırakır. Bir nesnenin kendisine bir referansı varsa, bir daha kullanılmasa bile çöp toplama için uygun değildir.

Örneğin, bir nesne bir diziye yerleştirilir ve ondan hiç çıkarılmazsa, her zaman bellekte kalır. Bazen kalan nesneler olarak adlandırılan bu nesneler, zamanla kullanılabilir tüm boş belleği tüketebilir ve OutOfMemory istisnasına neden olabilir. Nesne, diğer nesnelerden oluşan büyük bir ağaca atıfta bulunduğunda, ki bu genellikle uygulamalarda söz konusudur, sorun büyütülür.

Diğer bir tehlike, veritabanı bağlantıları veya geçici dosyalar gibi kaynakları temsil eden kalıcı nesnelerdir. Bir nesne bellekte ne kadar uzun süre kalırsa, katedilmesi gereken daha fazla nesne olduğu için çöp toplama işlemi o kadar pahalı olur. Profil oluşturucular, kalan nesneleri bulmanın ve bunların çöp toplanmasını neyin engellediğini belirlemenin en iyi yolunu sunar.

Kalan nesneleri üreten basit bir örneğe bakalım ve onu bulmak için JProbe’u kullanalım. Bir grafik düzenleyici oluşturduğumuzu ve Point nesnelerinin oluşturulması için bir soyutlama katmanı sağlayan bir fabrikaya ihtiyacımız olduğunu varsayalım. Fabrika uygulama parçası gösterilmektedir.

createPoint yöntemi, Point örnekleri oluşturur ve bunları bir diziye yerleştirir. removePoint, noktayı diziden kaldırır ve PointFactory, fabrika aracılığıyla birkaç nokta oluşturan bir test yöntemiyle birlikte gelir. Test yönteminin kodu gösterilir.

PointFactory’nin ana yöntemi, Test Noktalarını Yazdır düğmesini içeren bir iletişim kutusu görüntüler. Bir düğmenin tıklanması, PointFactory’nin printTestPoints() yönteminin çağrılmasıyla sonuçlanır. printTestPoints’in uygulanması tamamen geçerli bir Java kodu gibi görünüyor, ancak çalıştırılması bellek sızıntılarına neden oluyor.

Ayırdığımız nesnenin boyutunu ve döngüdeki yineleme sayısını artırırsak, mevcut tüm belleği hızla tüketebiliriz. Örneğimizde sızıntıya neyin sebep olduğunu şüphesiz anladınız. 50 satırdan az kod içeren bir sınıfımız olduğu için bunu görmek kolaydır, ancak karmaşık mantığa sahip yüzlerce sınıfımız olsaydı, sorun bu kadar belirgin olmazdı. Profilcilerin vazgeçilmez hale geldiği yer burasıdır.

Örnek kodun bellek yönetimini araştırmak için, covertjava.profile.PointFactory’yi JProbe Bellek Hata Ayıklayıcı’da bağımsız bir uygulama olarak yapılandırmalıyız. JProbe’da çalıştırdıktan sonra, ilk görünüm bir çalışma zamanı yığın özeti ve bir sınıf görünümü gösterir.

Uygulama küçük olduğu için sınıf görünümünde sadece birkaç sınıf görüyoruz, ancak büyük bir uygulamada sınıf veya paket adına göre bir filtre uygulanabilir. Uygulama iletişim kutusu göründüğünde, sınıflara ve örnek sayısına bakıldığında henüz hiçbir java.awt.Point nesnesinin oluşturulmadığı görülür.

Uygulama içerisinden Print Test Points butonuna tıklıyoruz ve class görünümüne geri dönüyoruz. Şimdi beş Point örneğinin ve beş StringBuffer örneğinin oluşturulduğunu görüyoruz. Bu, printTestPoints yöntemini çağırmanın apaçık sonucudur ki bu hiç de şaşırtıcı değildir.

JProbe, çöp toplamanın uygulanmasını sağlar, bu yüzden şimdi onu yapacağız. Çöp toplama işlemi tamamlandıktan sonra, StringBuffer örneklerinin gittiğini ancak noktaların hala bellekte olduğunu fark etmelisiniz. Test Noktalarını Yazdır düğmesinden başlayarak testi tekrarlamak Points sayısını 10’a çıkarıyor. Bu da hafıza sızıntılarının var olduğu iddiamızı doğruluyor ve şimdi noktaların neden hafızada kaldığını öğreneceğiz.


Windows 10 yetersiz bellek hatası
RAM sorunları
Bilgisayarınızda kullanılabilir bellek yetersiz olduğundan
Yetersiz bellek hatası Windows 7
MemTest86
Sanal bellek yetersiz Hatası
Windows bellek sorunu
Ram arızası nasıl anlaşılır


Yayınlanmayan örneği belirledikten sonra, çöp toplanmasını neyin engellediğini bulmak için birkaç seçeneğiniz vardır: kaynak kodunu manuel olarak incelemek, bir profil oluşturucuda referans ağacına göz atmak ve bir dizide köke giden tüm yolları bulmak. profilci.

Kaynak kodunu gözden geçirmek ve örneğin oluşturulduğu tüm yerleri bulmak, ona yapılan bazı referansların kapsam dışına çıkıp çıkmadığını ve hükümsüz kılınıp kılınmadığını anlamanıza yardımcı olabilir. Profil oluşturucular, genellikle göreve yardımcı olabilecek bir örnek için ayırma noktasını gösterebilir. Bu, zaman alıcı olabilecek bir kaba kuvvet yaklaşımıdır.

Daha sofistike bir yol ve bazen tek uygulanabilir yol, bir çalışma zamanı yığını anlık görüntüsü almak ve ardından söz konusu nesneye bakarak ona göz atmaktır. Kaynak koddaki bir örneğe yönelik olası referansları manuel olarak izlemek yerine, yığın anlık görüntüsüne göz atmak, nesneyi gerçekten bellekte tutan çalışma zamanı referanslarında gezinmenizi sağlar.

Profil oluşturucuların çoğu yönlendirenleri (söz konusu nesneyi işaret eden nesneler) ve referansları (söz konusu nesne tarafından işaret edilen nesneler) gösterir. Çok güçlü bir özellik, profil oluşturucunun nesneden köke giden tüm yolları gösterme yeteneğidir. Anlık görüntüdeki nesne grafikleri karmaşık ve gezinmesi zor olabilir.

Yalnızca belirli bir nesneyle ilgileniyorsanız, grafiğin tamamını görmeniz gerekmez; bunun yerine, hangi nesnelerin çöp toplanmasını engellediğini görmeniz yeterlidir. Çöp toplayıcının bir nesneyi yalnızca köklerden erişilemiyorsa geri aldığını hatırlayın. Bu nedenle, belirli bir nesneden köke giden tüm yolları tanımlayabilir ve ortadan kaldırabilirseniz, çöp toplama için uygundur.

Yığın anlık görüntüsü almadan önce, çöp toplama isteğinde bulunmak her zaman iyi bir fikirdir. Bu, artık başvurulmayan nesneleri kaldırır ve bellek sızıntılarını izleme işini kolaylaştırır. JProbe’da bunu Program menüsünden Çöp Toplama İsteği seçerek yapabilirsiniz.

Ardından Program menüsünden Take Heap Snapshot’ı seçerek heap snapshot’ı alın. JProbe anlık görüntüyü yakaladıktan sonra, Anlık Görüntü menüsünden Sınıf Görünümü’nü seçin. Artık yığının durumuna ve nesne grafiklerine bakabilirsiniz. Bizim durumumuzda, java.awt.Point nesneleri ile ilgileniyoruz, bu nedenle Class View’de ona sağ tıklayıp açılan menüden Instance Detail View’u seçiyoruz.

Yeni ekran, hafızadaki tüm Nokta örneklerini görüntüler ve yönlendiren ve referans ağaçlarına göz atmamızı sağlar. Yönlendiren ağaç, örneğe doğrudan veya dolaylı olarak bir çocuk olarak sahip olan bir atalar hiyerarşisinden oluşur, yani tüm yakın ebeveynleri, ebeveynlerinin ebeveynleri, ebeveynlerinin ebeveynlerinin ebeveynleri vb.

Ağaçta gezinmek bize hangi referansların tutulduğuna dair iyi bir fikir verir. Point örneğimizde, PointFactory tarafından başvurulan bir ArrayList tarafından başvurulduğunu görebiliriz.

JProbe, aslında kullanmayı tercih ettiğim başka bir görüşe sahip. Buna Referans Grafiği denir ve nesne grafiğinin daha iyi görselleştirilmesidir. Bir Noktanın Referans Grafiği’ni görüntülemek için, bir Nokta örneğine sağ tıklayın ve açılır menüden Örnek Referansları ve Referansları’nı seçin.

Bu, seçilen nesne merkezde olacak şekilde tüm nesneleri adlandırılmış dikdörtgenler olarak gösteren yeni bir pencere görüntüler. Noktaların neden bellekte kaldığını bulmaya çalıştığımız için, grafik araç çubuğundaki Kök Yolu simgesine tıklayın. Ortaya çıkan pencere gösterilir.


Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır. 

1) Backlink Paketi  50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)


 

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

× Bize Whatsapp'tan Ulaşın