Rumah > Java > javaTutorial > teks badan

Adakah Menetapkan Rujukan Benang kepada Null Menjamin Pengumpulan Sampahnya di Jawa?

Barbara Streisand
Lepaskan: 2024-11-04 06:27:29
asal
666 orang telah melayarinya

Does Setting a Thread Reference to Null Guarantee Its Garbage Collection in Java?

Java Thread Garbage Collection

Soalan berulang dalam komuniti pengaturcaraan Java berkaitan dengan pengumpulan sampah benang. Pertimbangkan kod berikut:

<code class="java">public class TestThread {
    public static void main(String[] s) {
        // anonymous class extends Thread
        Thread t = new Thread() {
            public void run() {
                // infinite loop
                while (true) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    }
                    // as long as this line printed out, you know it is alive.
                    System.out.println("thread is running...");
                }
            }
        };
        t.start(); // Line A
        t = null; // Line B
        // no more references for Thread t
        // another infinite loop
        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>
Salin selepas log masuk

Di sini, benang dicipta (Baris A) dan kemudian rujukan kepadanya ditetapkan kepada nol (Baris B). Jangkaan adalah bahawa objek benang harus dikumpul sampah kerana ia tidak mempunyai rujukan, tetapi benang terus berjalan selama-lamanya.

Memahami Pengumpulan Sampah Benang

Sebab untuk tingkah laku ini terletak pada konsep "akar kutipan sampah". Benang yang sedang berjalan dianggap sebagai akar kutipan sampah, bermakna ia adalah salah satu titik rujukan yang menentukan kebolehcapaian oleh pengumpul sampah. Dalam erti kata lain, selagi benang berjalan, ia akan terus hidup, walaupun ia tidak mempunyai rujukan daripada utas utama.

Implikasi untuk Pengurusan Benang

Tingkah laku ini mempunyai implikasi untuk pengurusan benang yang betul di Jawa. Adalah penting untuk memahami bahawa walaupun semua rujukan kepada benang dialih keluar daripada benang utama, benang itu sendiri tidak semestinya layak untuk pengumpulan sampah. Adalah menjadi tanggungjawab aplikasi untuk menamatkan atau mengganggu urutan secara eksplisit apabila ia tidak diperlukan lagi.

Kesimpulan

Bertentangan dengan andaian awal, utas dalam Java tidak sampah secara automatik dikumpul apabila semua rujukan kepada mereka dialih keluar. Sebaliknya, benang berjalan dianggap sebagai punca pengumpulan sampah, menghalang pembersihannya sendiri. Pengurusan utas yang betul memerlukan penamatan atau gangguan secara eksplisit utas yang tidak lagi diperlukan untuk mengelakkan kebocoran sumber dan isu prestasi.

Atas ialah kandungan terperinci Adakah Menetapkan Rujukan Benang kepada Null Menjamin Pengumpulan Sampahnya di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan