Maison > Questions et réponses > le corps du texte
既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢
PHP中文网2017-04-18 10:51:43
Les ressources mémoire sont limitées. La collecte des déchets ne recycle que les "déchets". Les objets utiles à l'exécution de votre programme ne seront pas recyclés.
高洛峰2017-04-18 10:51:43
Il existe deux situations de débordement de mémoire : l'une est un débordement de pile, comme l'appel d'une récursivité infinie. Il y a aussi un débordement de tas, c'est-à-dire que l'objet qui sort du nouveau n'est pas détruit immédiatement, comme le nouveau tout le temps.
黄舟2017-04-18 10:51:43
Parce que certains programmes mal écrits créeront des objets à l'infini avant que le mécanisme GC ne prenne effet.
大家讲道理2017-04-18 10:51:43
De manière générale, les fuites de mémoire en Java font référence au fait que la mémoire allouée qui n'est plus nécessaire au programme ne peut pas être récupérée.
Le mécanisme de récupération de place détermine si la mémoire peut être récupérée grâce à l'accessibilité de l'objet et de l'objet racine. Cependant, en raison d'erreurs de programmation ou pour d'autres raisons, les références d'objet expirées sont toujours conservées et le garbage collector ne peut pas récupérer les éléments associés. espace.
伊谢尔伦2017-04-18 10:51:43
Il ne peut rien faire s'il occupe la bouche d'égout et ne fait pas caca.
Je vous recommande de lire le blog écrit par mon collègue : http://blog.csdn.net/zhanggan...
天蓬老师2017-04-18 10:51:43
Certains objets ne sont plus nécessaires mais sont toujours référencés et ne peuvent pas être recyclés
PHPz2017-04-18 10:51:43
Pour l'instant, les choses créées par les humains ne peuvent pas surpasser les humains eux-mêmes. L'algorithme GC de Java a été écrit par des humains. Cependant, certaines personnes risqueront leur vie et écriront du code qui ne peut pas être recyclé par GC
.PHPz2017-04-18 10:51:43
Ma propre compréhension, veuillez me corriger si je me trompe.
Dans JDK6, une méthode de String est appelée subString, qui est utilisée pour générer une sous-chaîne. Pour une génération plus rapide, String a un constructeur,
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
pointe directement vers le tableau String d'origine. Nous savons tous qu'une nouvelle chaîne String dans le pool constant sera générée à chaque fois. Cependant, cette référence empêche le recyclage de la chaîne d'origine. Parce que la valeur de subString le désignera. Cela entraînera des fuites de mémoire.
La JVM effectue le GC toute seule sans trop d'interférence des programmeurs. Cependant, en raison de certaines opérations incorrectes, certains objets qui n'ont plus besoin d'être utilisés ont encore des références, ce qui entraîne des fuites de mémoire.
PHP中文网2017-04-18 10:51:43
JVM : les programmeurs s'accrochent aux ordures, ce qui me met très gêné.