Daha önce Java'da bir Hizmette Özel Nesneleri kullandım ve her zaman arka uçta çalışmayı sürdürdüm ve bazen Çöp Toplayıcı tarafından nesne yok edildiğinde NULL_POINTER_EXCEPTION
gösterdiği izlerle Bug raporları aldım. Tüm yüksek son cihazlara sahip olduğum için, statik bir son nesnenin çöp toplayıcı tarafından yok edilmesini veya yok edilmesini test edemiyorum?Statik bir final Nesne, Çöp Toplayıcı tarafından silindi mi?
cevap
Statik bir Son Nesne, Çöp Toplayıcı tarafından silindi mi?
static
ile sınıf yüklü classloader ulaşılamaz hale gelir:
Bunun olabileceğini üç koşul düşünebiliriz. Ancak bu,'dan sonra sadece olabilir, kodunuz hiçbir şeyin nesnenin GC'd olduğunu fark edemeyeceği bir noktaya ulaştı!
Bir şey null
'u static final
'a atamak için "kötü yansıtıcı hileler" kullanmıştır. (Evet, yapılabilir ...)
Bir şey kurnazı kurnazca bozuyor; Örneğin. bazı arabası JNI/JNA kodu. Eğer olduğundan (görünüşte) GC'd olmanın nesnenin etkisi gözlemleyerek o
Not, bu GC'd olmanın classloader doğrudan bir sonucu olamaz. Başka bir şey, sınıf yükleyicisi ve final static
'un GC'ed olması için mümkün olsaydı ... eğer gerçekten burada olan şey buysa.
Aslında senin sorunun GC-ilişkili olmadığı şüpheli. Daha ziyade, hizmetinizin oturum açılmayan denetlenmeyen bir istisna nedeniyle ölmekte olduğundan şüpheleniyorum."Ana" dışındaki iş parçacıklarındaki yakalanmamış istisnalar için varsayılan davranış, bunları sessizce yok saymaktır.
Hizmet iş parçacıklarınızın, run()
yöntemindeki catch
yöntemiyle veya "yakalanmamış bir istisna işleyici" ile tüm özel durumları günlüğe kaydetmediğini kontrol etmenizi öneririz.
JVM, GC "kök" konumlarındaki tüm canlı referansları (mevcut çağrı yığındaki tüm nesneler gibi) incelemesi gereken bir işaret süpürme GC algoritması kullanır. Her canlı nesne canlı olarak "işaretlenir" ve canlı bir nesne tarafından atıfta bulunulan herhangi bir nesne de canlı olarak işaretlenir.
Markalama aşamasının tamamlanmasından sonra, GC işaretlenmemiş tüm nesneler için hafızayı serbest bırakarak (kalan canlı nesneler için belleği sıkıştırır) yığın boyunca süpürür.
ben "hayır 'final' tadil edici maddeye GC onun iş yükünü azaltmaya yardımcı olmaz" demek için gidiyorum.Normal Java Uygulamasında (Android hakkında emin değilim), statik sonlandır atıfta bulunulan nesne yalnızca uygun ClassLoader kaldırıldığında GCed edilir.
her web uygulaması undeploying, (örneğin Tomcat) bir kap içinde birden fazla internet uygulamaları olan, örneğin, bir uygulamanın ClassLoader unloades, bu uygulamanın statik son referans nesne GCed olacaktır. Ancak diğer ClassLoader'lar tarafından yüklenen nesneler (örneğin, diğer web uygulamalarının ClassLoader'ları, ortak ClassLoader, boot-strap ClassLoader gibi) GCed olmayacaktır.
Yani sorunun cevabı şudur: ClassLoader de-etkin olup olmadığına bağlıdır.- 1. Statik üyelerin çöp toplama
- 2. Java anonim sınıfları ve Çöp Toplayıcı
- 3. java.lang.IllegalStateException: Nesne artık Realm tarafından yönetilmiyor. Silindi mi?
- 4. Çöp toplayıcı olmadan proje osx
- 5. alt dizinler ve Git çöp toplayıcı
- 6. Scala: bir sınıftaki genel statik final
- 7. StaleObjectStateException: Satır başka bir işlem tarafından güncellendi veya silindi mi?
- 8. Final Powermockito, final olmayan beton sınıfında final yöntemini kullanabilir mi?
- 9. Statik alanda kendini referans alan bir sınıf çöp toplayabilir mi?
- 10. iPhone OS 3.0 gerçek bir çöp toplayıcı var mı?
- 11. Ruby Class nesne çöp toplama
- 12. Web Çalışanlarını Kullanarak Olası Bellek Kaçakları (Çöp Toplayıcı)
- 13. Çöp toplayıcı, büyük yığın bölümü için 16384 bayt bellek ayıramadı
- 14. PowerMock: özel statik final değişkenini atayın, somut bir örnek
- 15. Java yansımasını kullanarak statik final alanını değiştiremez misiniz?
- 16. Netty çöp üretimini nasıl azaltabilirim?
- 17. Git geri dönüşü "silindi" nedeniyle "silindi"
- 18. Var bir printf içinde bildirmek GCC tarafından toplanan çöp olamaz
- 19. Nesne id tarafından alın()?
- 20. Java'da sınıflar çöp toplayıp ne zaman alınır?
- 21. Kaç satır silindi?
- 22. Neden ChannelOutboundHandler istisnalar exceptionCaught() yöntemi tarafından yakalanmadı? (Netty 4.0.4.Final)
- 23. yeni Konu() ve Çöp Toplama
- 24. Android Final Değişkenler
- 25. Enjeksiyon, statik yöntemle yapılabilir mi?
- 26. Tekerlek toplayıcı nasıl yapılır
- 27. MongoDB toplayıcı seçmeli projesi
- 28. Java 8 için varsayılan çöp toplayıcısı
- 29. jquery ayırma kompleksleri statik nesne
- 30. .Net Çöp Toplayıcı - Çalışma Zamanı sırasında Gen2'ye nelerin teşvik edildiğini görün
Neden C++ ve C# etiketleriniz var? – nogard
Visual Basic etiketini unuttun ... –
"Özel nesne servisi", "ileri teknoloji aygıtları" - hangi platform bu? Bu özellikle Android JVM mi? – Rup