Java’da Bellek Sızıntılarını Anlamak

Java Developer Tutorials

Java’da uygulamalar oluştururken geliştiriciler, yazılımlarında aşağıdakileri kullanarak yönetilen nesneler oluşturabilirler. yeni anahtar kelime. Çöp toplayıcı artık gerekli olmayan nesnelerin kaldırılmasıyla ilgilendiğinden, programcıların bu yönetilen nesneleri kodlarında açıkça kaldırmaları gerekmez. Nesneler çöp toplayıcı tarafından atıldığı sürece sorun yok. Ancak, çöp toplayıcı artık başvurulmayan nesneleri kaldıramazsa, uygulamalarınızda bellek sızıntısı olasılığı vardır.

Java’daki bir bellek sızıntısı, uygulama tarafından artık ihtiyaç duyulmayan bir nesnenin Java Sanal Makinesi (JVM). Bir uygulama yanlışlıkla artık gerekli olmayan nesne referanslarına takıldığında bellek sızıntıları meydana gelir. Bellek sızıntıları, uygulamanızın artan (ve beklenmedik) bellek kullanımı nedeniyle zaman içinde performansın düşmesine neden olur.

Bu Java programlama öğreticisi, Java’daki bellek sızıntılarından, bunların neden oluştuğundan ve geliştiricilerin bunları nasıl önleyebileceğinden bahseder.

Bir yana, programcılar, bellek sızıntılarını tespit etmek ve kaynakların tüketilmesine neden olan sorunların izlenmesine yardımcı olmak için Uygulama Performansı İzleme (AMP) araçlarını ve yazılımını kullanabilir. Baktığımız harika bir makalemiz var. Geliştiriciler için En İyi Uygulama Performansı İzleme Araçları.

Bellek Sızıntısı Nedir?

Bellek sızıntısı, artık gerekli olmayan bir nesnenin JVM belleğinde canlı kaldığı bir durumdur. Java uygulamalarında farklı bellek sızıntıları oluşturmaktan da sorumlu olan Java’da bellek sızıntılarının çeşitli nedenleri vardır. Bellek sızıntıları, uygulamanızın artan (ve beklenmedik) bellek ve kaynak kullanımı nedeniyle zaman içinde düşük uygulama performansına yol açar.

Çöp toplayıcının, referans verilmeyen nesneleri periyodik olarak toplamada usta olduğuna dikkat edilmelidir. Ancak, hala kullanımda olan nesneleri, yani hala referansları olan nesneleri toplamaz. İşte tam olarak bellek sızıntılarının meydana geldiği yer. Bellek sızıntılarını önlemeye yardımcı olmak için programları, artık ihtiyaç duyulmadığında belleği serbest bırakacak şekilde tasarlamak önemlidir.

Ek olarak, programcılar bellek sızıntısı potansiyelinin farkında olmalı ve programlarını onlar için kapsamlı bir şekilde test ettiğinden emin olmalıdır. Bir bellek sızıntısı meydana geldiğinde, program sonunda çökene kadar yavaş yavaş daha fazla bellek kullanır.

Okumak: Java Uygulamalarında Performansı Artırma İpuçları

Yığın ve Yığındaki Bellek Sızıntıları Nelerdir?

Java’da hem yığın hem de yığın bellek için bellek sızıntılarıyla karşılaşabilirsiniz. Yığın bellek sızıntıları, bir nesne oluşturulduğunda ancak yığından hiçbir zaman çıkarılmadığında meydana gelir. Bu, kod artık ihtiyaç duyulmayan bir nesneye başvuruyorsa ancak başvuru hiçbir zaman kaldırılmazsa gerçekleşebilir. Sonunda, yığın kullanılmayan nesnelerle dolar ve uygulamanın belleği kısa sürede tükenir.

Yığın bellek sızıntıları, bir yöntem çağrılmaya devam ettiğinde ancak hiçbir zaman çıkmadığında meydana gelir. Bu, sonsuz bir döngü varsa veya yöntem her seferinde farklı verilerle çağrılıyorsa ancak veriler hiç kullanılmıyorsa olabilir. Sonunda yığın dolacak ve programın belleği tükenecektir.

Java’da Bellek Sızıntıları Neden Oluşur?

Java’da bellek sızıntılarının en yaygın nedenlerinden biri, bir uygulamanın artık ihtiyaç duymadığı kaynakları düzgün şekilde serbest bırakamamasıdır. Bu, bir uygulama nesneler için bellek ayırdığında ancak artık ihtiyaç duyulmasa bile onları asla serbest bırakmadığında ortaya çıkabilir. Bu olduğunda, bu nesneler için ayrılan bellek hiçbir zaman serbest bırakılmaz ve uygulamanın genel bellek kullanımı zamanla kademeli olarak artar.

Bu, programlama hataları nedeniyle veya programcının bunu yapacak kodu eklemeyi unutması nedeniyle olabilir. Her iki durumda da, etkilenen programın performansının düşmesine neden olabilir ve en kötü senaryolarda, programın çökmesine neden olabilir.

Programlama hataları nedeniyle bellek sızıntıları meydana gelebilir, yani bellek aldığınızda ancak aynı belleğe artık ihtiyaç duyulmadığında bunları serbest bırakmadığınızda. Bunu düzeltmek için, alınan belleği serbest bırakmak için gerekli kodu yazmalısınız.

Okumak: Java’da Çöp Toplama Rehberi

Java’da Bellek Sızıntıları Nasıl Önlenir

Java’da bellek sızıntılarını önlemenin en iyi yollarından biri, aşağıdaki gibi bir araç kullanmaktır. JProfil, bu, kodunuzun bellek ayırdığı ancak doğru şekilde serbest bırakmadığı yerleri belirlemenize yardımcı olabilir. JProfiler ayrıca, artık ihtiyaç duyulmayan nesnelere yapılan referanslara bağlı kalmak gibi bellek sızıntılarının diğer olası nedenlerini belirlemenize de yardımcı olabilir.

Olası bellek sızıntısı kaynaklarını belirledikten sonra, artık ihtiyaç duyulmadığında kaynakların düzgün bir şekilde serbest bırakıldığından emin olmak için kodunuzu değiştirebilirsiniz. Bu, uygulamanızın genel bellek ayak izini azaltmaya ve genel performansını artırmaya yardımcı olabilir.

Statik alan, Örnek Alanı ve İş Parçacığı Yerel Bellek Sızıntıları

Programcıların Java uygulamalarında karşılaşabileceği çeşitli bellek sızıntısı türleri vardır. Statik alanların neden olduğu sızıntılar en yaygın olanıdır. Bu, artık gerekli olmayan bir sınıfta statik bir alan kullandığınızda oluşur.

Bir sınıfın örnek alanı artık gerekli olmayan bir nesneye başvurduğunda bir “örnek alanı” sızıntısı meydana gelir. Bir iş parçacığı yerel değişkeni, iş parçacığı canlı olana kadar örneği birden çok iş parçacığı arasında paylaşmak yerine bir nesneye başvurduğunda “iş parçacığı yerel” sızıntısı oluşur.

Java’da Bellek Sızıntıları Nasıl Önlenir: En İyi Uygulamalar

Java’da bellek sızıntılarını önlemek için aşağıdaki en iyi uygulamalara bağlı kalabilirsiniz:

  • Java’nın en son sürümünü kullanın.
  • Eclipse MAT, Visual VM, JProbe, YourKit, JRockit, AppPerfect ve benzeri gibi bir bellek sızıntısı algılama aracı kullanın.
  • Bellek sızıntılarını tespit etmek için bir profil oluşturucu aracı kullanın.
  • Kullanmaktan kaçın sistem.gc() kodunuzdaki yöntem çağrıları
  • YourKit, JProfiler veya benzeri bir bellek sızıntısı algılama aracı kullanın
  • İç sınıfları kullanmaktan kaçının.

Bellek sızıntılarını teşhis etmek ve düzeltmek zor olabilir. Ancak, nedenleri anlayarak bunları tespit edebilir ve düzeltebilirsiniz. Aşağıdaki adımları izleyerek herhangi bir bellek sızıntısının temel nedenini bulabilmeniz gerekir:

  • Bir bellek sızıntısı olduğunu belirleyin (yani, bir profil oluşturucu veya performans izleyici ile)
  • Yayınlanmamış referanslar için çağrı yığınını kontrol edin
  • Bu tür nesnelerin neden çöp toplanmadığını belirleyin
  • Bu tür nesneleri manuel olarak kaldırmak için kodunuzu yazın

Java’daki Bellek Sızıntıları Üzerine Son Düşünceler

Bir program nesneler, veritabanı bağlantıları veya dosya tanıtıcıları gibi kullanılmayan kaynakları serbest bırakamadığında bir bellek sızıntısı meydana gelirken, bir nesne artık gerekmese bile başka bir nesneye referansı tuttuğunda bir referans sızıntısı meydana gelir. Bu istenmeyen nesne başvuruları, yerleşik Java çöp toplama işleminin bu nesnelerin edindiği belleği temizlemesini engeller. Bu yazımızda Java’da bellek sızıntısının ne olduğunu, neden oluştuğunu ve bellek sızıntılarını nasıl önleyebileceğinizi inceledik.

Devamını oku Java programlama ve yazılım geliştirme eğitimleri.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.