Adakah Sampah Benang Dikumpul?
Contoh ini mempamerkan utas larian yang kekal aktif walaupun kehilangan rujukannya dalam utas utama.
<code class="java">public class TestThread { public static void main(String[] s) { Thread t = new Thread() { public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { } System.out.println("thread is running..."); } } }; t.start(); // Line A t = null; // Line B while (true) { try { Thread.sleep(3000); } catch (InterruptedException e) { } System.gc(); System.out.println("Executed System.gc()"); } // The program will run forever until you use ^C to stop it } }</code>
Memahami Mekanisme Pengumpulan Sampah
Rujukan kepada utas t dialih keluar pada Baris B, tetapi utas itu terus dilaksanakan kerana ia dianggap sebagai "akar kutipan sampah ." Pengumpul sampah menentukan sama ada objek boleh dicapai dengan menggunakan akar sebagai titik rujukan.
Memandangkan benang yang sedang berjalan ialah akar, ia mengekalkan dirinya dan objek lain yang berpotensi untuk dirujuk, daripada dikumpul sampah. Ini selari dengan gelagat utas utama, yang juga tidak mempunyai rujukan langsung namun tidak layak untuk koleksi.
Implikasi
Tingkah laku ini mempunyai implikasi untuk pengurusan memori dan potensi kebocoran ingatan. Jika benang direka untuk digunakan selama-lamanya, penyingkirannya daripada kod aplikasi tidak boleh dianggap sebagai isyarat untuk memungutnya oleh sampah. Adalah penting untuk mengambil kira senario sedemikian dalam analisis penggunaan memori dan penalaan prestasi.
Atas ialah kandungan terperinci Adakah Benang Lari Layak untuk Kutipan Sampah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!