Maison > Java > javaDidacticiel > Comment résoudre la fuite de mémoire Java ThreadLocal

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

王林
Libérer: 2023-05-18 10:25:05
avant
1440 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:
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
Derniers numéros
Impossible d'installer Java
Depuis 1970-01-01 08:00:00
0
0
0
Java peut-il être utilisé comme backend du Web ?
Depuis 1970-01-01 08:00:00
0
0
0
Installer JAVA
Depuis 1970-01-01 08:00:00
0
0
0
Aide : Données chiffrées JAVA Décryptage PHP
Depuis 1970-01-01 08:00:00
0
0
0
Est-ce en langage Java ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal