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.
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.
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.
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...
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
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[]) {
} 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.
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.
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.
Parce que certains programmes mal écrits créeront des objets à l'infini avant que le mécanisme GC ne prenne effet.
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.
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...
Certains objets ne sont plus nécessaires mais sont toujours référencés et ne peuvent pas être recyclés
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
.C'est la même chose que
中国那么大,为什么还有人在朝阳区懵逼
.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[]) {
}
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.
JVM : les programmeurs s'accrochent aux ordures, ce qui me met très gêné.