Rumah > Java > javaTutorial > Bagaimana untuk menyelesaikan kebocoran memori java ThreadLocal

Bagaimana untuk menyelesaikan kebocoran memori java ThreadLocal

王林
Lepaskan: 2023-05-18 10:25:05
ke hadapan
1393 orang telah melayarinya

1. Contoh Leak

Entri kelas dalam statik ThreadLocalMap:

    static class Entry extends WeakReference<ThreadLocal<?>> {
        /** The value associated with this ThreadLocal. */
        Object value;
 
        Entry(ThreadLocal<?> k, Object v) {
            super(k);
            value = v;
        }
    }
Salin selepas log masuk

ThreadLocalMap menggunakan Entri kelas dalam statik untuk melaksanakan Kemasukan Mewarisi kelas WeakReference, jadi kunci dalam ThreadLocalMap sebenarnya adalah rujukan lemah kepada ThreadLocal.

Oleh kerana ThreadLocalMap menggunakan rujukan lemah ThreadLocal sebagai kunci, apabila ThreadLocal ini tidak mempunyai rujukan kuat luaran, ia akan menjadi GC. Pada masa ini, Entri dengan kunci nol akan muncul dalam ThreadLocalMap Sudah tentu, nilai Entri ini tidak akan dapat diakses.

Dalam kes ini, jika utas yang berfungsi semasa belum berakhir, maka nilai dengan kunci nol dirujuk dengan kuat oleh Entry dan Entry dirujuk dengan kuat oleh ThreadLocalMap bagi thread semasa, menyebabkan nilai ini tidak pernah menjadi GC , menyebabkan kebocoran memori.

2. Penyelesaian

Kaedah cleanSomeSlots() dan expungeStaleEntry() ThreadLocalMap boleh mengosongkan nilai dengan kekunci nol. Dalam kaedah set(), get(), dan remove() ThreadLocal, cleanSomeSlots() atau expungeStaleEntry() akan dipanggil untuk mengosongkan semua nilai dengan kekunci null dalam ThreadLocalMap.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan kebocoran memori java ThreadLocal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan