Bu çok rahatsız edici bir soru ve bir dilin ne kadar yararlı olduğuna rağmen birçoğunun Java'ya karşı çıkmasına katkıda bulunduğunu hissediyorum.
Bir şey yapmak için "System.gc" ye güvenemeyeceğiniz gerçeği inanılmaz göz korkutucu ve kolayca "Korku, Belirsizlik, Şüphe" hissini dile getirebilir.
Birçok durumda, kullanıcıların önemli bir şekilde tasarlandığını / yanıt vermediğini düşünmelerine neden olacak önemli bir olay gerçekleşmeden önce bilerek neden olduğunuz bellek artışlarıyla uğraşmak güzeldir.
Çöp koleksiyonunu kontrol etme yeteneğine sahip olmak çok iyi bir eğitim aracı olacaktır, bu da insanların çöp toplamanın nasıl çalıştığını ve programların varsayılan davranışını ve kontrollü davranışı nasıl kullanmasını sağladığını anlamalarını geliştirecektir.
Bu konunun argümanlarını gözden geçireyim.
- Verimsiz:
Genellikle, program hiçbir şey yapmıyor olabilir ve tasarlandığından dolayı hiçbir şey yapmadığını biliyorsunuz. Örneğin, büyük bir bekleme mesaj kutusu ile bir tür uzun bekleme yapıyor olabilir ve sonunda çöp toplamak için bir çağrı da ekleyebilir, çünkü çalıştırma süresi, zamanın çok küçük bir kısmını alacaktır. uzun süre beklemek ama gc'nin daha önemli bir operasyonun ortasında hareket etmesini önleyecektir.
- Her zaman kötü bir uygulamadır ve bozuk kodu gösterir.
Katılıyorum, ne çöp toplayıcıya sahip olduğunuz önemli değil. Görevi çöpleri temizlemek ve temizlemek.
Kullanımın daha az kritik olduğu zamanlarda gc'yi çağırarak, hayatınız çalıştırılan koda bağlı olduğunda çalışma olasılığını azaltırsınız, bunun yerine çöp toplamaya karar verir.
Elbette, istediğiniz gibi davranmayabilir veya beklemeyebilir, ancak aramak istediğinizde hiçbir şeyin olmadığını bilirsiniz ve kullanıcı yavaşlığı / kesinti süresini tolere etmeye istekli olur. System.gc çalışıyorsa, harika! Değilse, en azından denedin. Çöp toplayıcının, bir çöp toplayıcının manuel olarak çağrıldığında nasıl davranacağına dair beklenmedik bir şey yapan doğal yan etkileri yoksa ve bu tek başına güvensizliğe neden olmadıkça basit bir aşağı tarafı yoktur.
- Yaygın bir kullanım durumu değildir:
Güvenilir bir şekilde elde edilemeyen bir kullanım durumudur, ancak sistem bu şekilde tasarlanmışsa olabilir. Bu bir trafik ışığı yapmak ve trafik ışıklarının bazı / tüm düğmelerinin hiçbir şey yapmaması için yapmaktır, düğmenin neden orada olduğunu sorgulamanızı sağlar, javascript'in çöp toplama işlevi yoktur, bu yüzden onun için o kadar dikkatli olmayın.
- Spesifikasyon, System.gc () öğesinin GC'nin çalıştırması gereken bir ipucu olduğunu ve VM'nin bunu göz ardı etmekte özgür olduğunu söylüyor.
"ipucu" nedir? "yoksay" nedir? bir bilgisayar sadece ipuçlarını alamaz veya bir şeyi göz ardı edemez, sistemin amacı tarafından yönlendirilen dinamik olabilen katı davranış yolları vardır. Uygun bir cevap, çöp toplayıcının gerçekte ne yaptığını, uygulama düzeyinde, talep ettiğinizde toplama yapmamasına neden olur. Özellik basitçe bir nop mu? Karşılaşmam gereken bir tür koşul var mı? Bu koşullar nelerdir?
Java'nın GC'si genellikle güvenmediğiniz bir canavar gibi görünüyor. Ne zaman geleceğini veya gideceğini bilmiyorsun, ne yapacağını, nasıl yapacağını bilmiyorsun. Çöp Toplamalarının talimat başına nasıl çalıştığına dair daha iyi bir fikre sahip bazı hayal edebiliyorum, ancak büyük çoğunluğu sadece "sadece işe yaradığını" umuyor ve sizin için iş yapmak için opak görünen bir algoritmaya güvenmek sinir bozucu.
Bir şey hakkında okumak ya da bir şey öğretmek ve aslında onun uygulanmasını, sistemler arasındaki farklılıkları görmek ve kaynak koduna bakmak zorunda kalmadan onunla oynayabilmek arasında büyük bir boşluk vardır. Bu, güven ve ustalık / anlayış / kontrol hissi yaratır.
Özetlemek gerekirse, cevapların doğasında var olan bir sorun var "bu özellik hiçbir şey yapmayabilir ve ne zaman bir şey yaptığını ve ne zaman yapmadığını ve neden yapmayacağını veya yapmayacağını, çoğu zaman, arkasındaki niyet makul olsa bile, bunu yapmaya çalışmanın sadece felsefeye aykırı olduğunu ima eder ".
Java GC'nin yaptığı gibi davranması uygun olabilir veya olmayabilir, ancak anlamak için, GC'nin yapmasına güvenebileceğinize dair kapsamlı bir genel bakış elde etmek için hangi yöne gideceğinizi gerçekten takip etmek zordur ve yapmamak, bu yüzden dile güvenmemek çok kolaydır, çünkü bir dilin amacı felsefi ölçüye kadar kontrollü bir davranışa sahip olmaktır (bir programcının, özellikle acemilerin belirli sistem / dil davranışlarından varoluşsal krize girmesi kolaydır) tahammül edebilir (ve eğer yapamazsan, gerekene kadar dili kullanmayacaksın) ve onları kontrol edemediğin bilinen bir sebep olmadan kontrol edemediğin daha fazla şey doğal olarak zararlıdır.