Sonlandırıcılardan Kaçınma – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları
Sonlandırıcılardan Kaçınma
Sonlandırıcılar tahmin edilemez, genellikle tehlikeli ve genellikle gereksizdir. Kullanımları düzensiz davranışa, düşük performansa ve taşınabilirlik sorunlarına neden olabilir. Sonlandırıcıların, bu maddede daha sonra ele alacağımız birkaç geçerli kullanımı vardır, ancak genel bir kural olarak, sonlandırıcılardan kaçınılmalıdır.
C++ programcıları, sonlandırıcıları C++ yıkıcılarının analoğu olarak düşünmemeleri konusunda uyarılır. C++’da yıkıcılar, bir nesneyle ilişkili kaynakları geri almanın normal yoludur, yapıcıların gerekli bir karşılığıdır.
Java programlama dilinde, çöp toplayıcı, erişilemez hale geldiğinde, programcının özel bir çabası gerektirmeyen bir nesneyle ilişkili depolamayı geri alır. C++ yıkıcıları, diğer bellek dışı kaynakları geri almak için de kullanılır. Java programlama dilinde genellikle bu amaçla try-finally bloğu kullanılır.
Sonlandırıcıların derhal yürütüleceğinin garantisi yoktur. Bir nesnenin erişilemez hale geldiği zaman ile sonlandırıcının yürütüldüğü zaman arasında keyfi olarak uzun sürebilir. Bu, bir kesinleştirici tarafından zaman açısından kritik hiçbir şeyin yapılmaması gerektiği anlamına gelir.
Örneğin, açık dosya tanımlayıcıları sınırlı bir kaynak olduğundan, açık dosyaları kapatmak için bir sonlandırıcıya bağımlı olmak ciddi bir hatadır. JVM sonlandırıcıları yürütmekte geciktiği için birçok dosya açık bırakılırsa, bir program artık dosyaları açamadığı için başarısız olabilir.
Sonlandırıcıların yürütülme hızı, öncelikle, JVM uygulamasından JVM uygulamasına kadar büyük ölçüde değişen çöp toplama algoritmasının bir işlevidir. Sonlandırıcı yürütme hızına bağlı olan bir programın davranışı da aynı şekilde değişebilir. Böyle bir programın, üzerinde test ettiğiniz JVM’de mükemmel bir şekilde çalışması ve ardından en önemli müşterinizin tercih ettiği JVM’de sefil bir şekilde başarısız olması tamamen mümkündür.
Gecikmeli sonuçlandırma sadece teorik bir problem değildir. Bir sınıf için bir sonlandırıcının sağlanması, nadir koşullar altında, örneklerinin yeniden kazanılmasını keyfi olarak geciktirebilir. Bir meslektaşım kısa süre önce bir OutOfMemoryError ile gizemli bir şekilde ölmekte olan uzun süredir çalışan bir GUI uygulamasında hata ayıkladı.
Analiz, uygulamanın öldüğü sırada sonlandırıcı kuyruğunda sonlandırılmayı ve geri alınmayı bekleyen binlerce grafik nesnesine sahip olduğunu ortaya çıkardı. Ne yazık ki, sonlandırıcı iş parçacığı, uygulamadaki başka bir iş parçacığından daha düşük bir önceliğe sahipti, bu nedenle nesneler, sonlandırma için uygun hale geldikleri oranda sonlanmıyordu. JLS, hangi iş parçacığının sonlandırıcıları çalıştıracağına dair hiçbir garanti vermez, bu nedenle bu tür bir sorunu önlemenin, sonlandırıcıları kullanmaktan kaçınmaktan başka taşınabilir bir yolu yoktur.
JLS, sonlandırıcıların hemen çalıştırılacağına dair hiçbir garanti vermemekle kalmaz, aynı zamanda onların hiç çalıştırılacağına dair hiçbir garanti de vermez. Bir programın, artık erişilemeyen bazı nesneler üzerinde sonlandırıcıları çalıştırmadan sona ermesi tamamen mümkündür, hatta muhtemeldir.
Sonuç olarak, kritik kalıcı durumu güncellemek için asla bir sonlandırıcıya güvenmemelisiniz. Örneğin, bir veri tabanı gibi paylaşılan bir kaynak üzerinde kalıcı bir kilidi serbest bırakmak için bir sonlandırıcıya bağlı olmak, tüm dağıtılmış sisteminizi tamamen durma noktasına getirmenin iyi bir yoludur.
System.gc ve System.runFinalization yöntemlerine kanmayın. Sonlandırıcıların idam edilme olasılığını artırabilirler, ancak bunu garanti etmezler. Sonlandırmayı garanti ettiğini iddia eden tek yöntem System.runFinalizersOnExit ve onun kötü ikizi Runtime.runFinalizersOnExit’tir. Bu yöntemler son derece kusurludur ve kullanımdan kaldırılmıştır.
Java. Döngüler
Java Örnekleri
For döngüsü java
Java Continue Kullanımı
Java continue Nedir
Java metot Örnekleri
Java programdan çıkma komutu
Java konuları
Sonlandırıcılardan kaçınılması gerektiğine henüz ikna olmadıysanız, göz önünde bulundurmaya değer başka bir bilgi daha: Sonlandırma sırasında yakalanmamış bir istisna atılırsa, istisna yok sayılır ve o nesnenin sonlandırılması sona erer.
Yakalanmayan istisnalar, nesneleri bozuk bir durumda bırakabilir. Başka bir iş parçacığı bu tür bozuk bir nesneyi kullanmaya çalışırsa, rastgele belirlenimsiz davranışlar ortaya çıkabilir. Normalde, yakalanmamış bir istisna, iş parçacığını sonlandıracak ve bir yığın izi yazdıracaktır, ancak bir sonlandırıcıda meydana gelirse, bir uyarı bile yazdırmaz.
Peki, nesneleri dosya veya iş parçacığı gibi sonlandırma gerektiren kaynakları içine alan bir sınıf için bir sonlandırıcı yazmak yerine ne yapmalısınız? Sadece açık bir sonlandırma yöntemi sağlayın ve sınıfın istemcilerinin artık gerekmediğinde her örnekte bu yöntemi çağırmasını isteyin.
Bahsetmeye değer bir ayrıntı, örneğin sonlandırılıp sonlandırılmadığını takip etmesi gerektiğidir: Açık sonlandırma yöntemi, nesnenin artık geçerli olmadığını özel bir alana kaydetmeli ve diğer yöntemler bu alanı kontrol etmeli ve eğer varsa bir IllegalStateException atmalıdır. nesne sonlandırıldıktan sonra çağrılır.
Açık bir sonlandırma yönteminin tipik bir örneği, InputStream ve OutputStream’deki close yöntemidir. Başka bir örnek, bir Timer örneğiyle ilişkili iş parçacığının kendisini nazikçe sonlandırmasına neden olmak için gerekli durum değişikliğini gerçekleştiren java.util.Timer üzerindeki iptal yöntemidir.
Java.awt’taki örnekler arasında Graphics.dispose ve Window.dispose yer alır. Bu yöntemler, tahmin edilebileceği gibi korkunç performans sonuçlarıyla genellikle göz ardı edilir. İlgili bir yöntem, bir Image örneğiyle ilişkili tüm kaynakları serbest bırakan ancak gerektiğinde kaynakları yeniden tahsis ederek onu hala kullanılabilir durumda bırakan Image.flush’tır.
Açık sonlandırma yöntemleri, hızlı sonlandırmayı sağlamak için genellikle try-finally yapısıyla birlikte kullanılır. Nihayet yan tümcesi içindeki açık sonlandırma yöntemini çağırmak, nesne kullanılırken bir istisna atılsa bile yürütülmesini sağlar.
Peki, eğer varsa, sonlandırıcılar ne işe yarar? İki meşru kullanım vardır. Biri, bir nesnenin sahibinin önceki paragraftaki tavsiyeye göre sağladığınız açık sonlandırma yöntemini çağırmayı unutması durumunda “güvenlik ağı” görevi görmektir.
Sonlandırıcının derhal çağrılacağının garantisi olmasa da, müşterinin açık sonlandırma yöntemini çağırarak pazarlığın sonunu yerine getiremediği (umarım nadir) durumlarda, kritik kaynağı hiç olmadığı kadar geç boşaltmak daha iyidir.
Açık sonlandırma yöntemi modelinin örnekleri olarak belirtilen üç sınıfın (InputStream, OutputStream ve Timer) ayrıca, sonlandırma yöntemlerinin çağrılmaması durumunda güvenlik ağları görevi gören sonlandırıcıları vardır.
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)