Soalan:
Di Java, pertimbangkan kelas utiliti hipotesis yang hanya digunakan semasa persediaan program:
class MyUtils { private static MyObject myObject = new MyObject(); /*package*/static boolean doStuff(Params... params) { // do stuff with myObject and params... } }
Adakah myObject layak untuk kutipan sampah apabila ia tidak lagi diperlukan atau adakah ia akan berterusan sepanjang hayat program?
Jawapan:
Medan statik tidak layak untuk kutipan sampah semasa kelasnya dimuatkan. Ia hanya boleh dikumpul apabila pemuat kelas yang bertanggungjawab untuk memuatkan kelas itu sendiri adalah sampah yang dikumpul.
Menurut Spesifikasi Bahasa Java (JLS) Bahagian 12.7, "Memunggah Kelas dan Antara Muka":
"Sesuatu kelas atau antara muka boleh dipunggah jika dan hanya jika pemuat kelas yang menentukannya boleh dituntut semula oleh pengumpul sampah [...] Kelas dan antara muka yang dimuatkan oleh pemuat bootstrap mungkin tidak dipunggah."
Oleh itu, dalam contoh yang diberikan, myObject akan berterusan selagi kelas MyUtils dimuatkan. Ia tidak akan dikumpul sampah sehingga pemuat kelas yang memuatkan MyUtils juga layak untuk kutipan sampah.
Atas ialah kandungan terperinci Adakah Pemungut Sampah Java Akan Menuntut Semula Medan Statik Seperti `myObject` dalam `MyUtils`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!