Maison > Java > javaDidacticiel > le corps du texte

Comment résoudre la fuite de mémoire Java ThreadLocal

王林
Libérer: 2023-05-18 10:25:05
avant
1351 Les gens l'ont consulté

1. Instance de fuite

Entrée de classe interne statique de ThreadLocalMap :

    static class Entry extends WeakReference<ThreadLocal<?>> {
        /** The value associated with this ThreadLocal. */
        Object value;
 
        Entry(ThreadLocal<?> k, Object v) {
            super(k);
            value = v;
        }
    }
Copier après la connexion

ThreadLocalMap utilise la classe interne statique Entry pour implémenter le stockage de référence ThreadLocal Weak.

Parce que ThreadLocalMap utilise la référence faible de ThreadLocal comme clé, lorsque ce ThreadLocal n'a pas de référence forte externe, ce sera GC. A ce moment, une entrée avec une clé nulle apparaîtra dans ThreadLocalMap. Bien entendu, la valeur de cette entrée ne sera jamais accessible.

Dans ce cas, si le thread de travail actuel n'est pas terminé, alors la valeur avec une clé nulle est fortement référencée par Entry, et Entry est fortement référencée par le ThreadLocalMap du thread actuel, ce qui fait que cette valeur n'est jamais GC, ce qui entraîne une fuite de mémoire.

2. Solution

Les méthodes cleanSomeSlots() et expungeStaleEntry() de ThreadLocalMap peuvent effacer les valeurs avec des clés nulles. Dans les méthodes set(), get() et remove() de ThreadLocal, cleanSomeSlots() ou expungeStaleEntry() seront appelées pour effacer toutes les valeurs avec des clés nulles dans ThreadLocalMap.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal