Maison > Java > javaDidacticiel > Quelles situations peuvent provoquer un débordement de mémoire Java ?

Quelles situations peuvent provoquer un débordement de mémoire Java ?

WBOY
Libérer: 2023-05-09 16:19:23
avant
1439 Les gens l'ont consulté

1. Débordement du tas, Le tas stocke les objets d'instance, mais tôt ou tard, la zone du tas sera pleine. Si la mémoire de la zone de tas est définie, une exception sera levée lors de sa création.

public class HeapOOM {
    static class User {}
    public static void main(String[] args) {
         List<User> list = new ArrayList<User>();
            while (true) {
                list.add(new User());
         }
    }
}
/*Exception in thread "main" java.lang.OutOfMemoryError:
GC overhead limit exceeded
at com.fdd.test.HeapOOM.main(HeapOOM.java:11)*/
Copier après la connexion

2. Débordement de pile de machine virtuelle et de pile de méthodes locales

Si la profondeur de pile requise par le thread est supérieure à la profondeur autorisée par le verrouillage de la machine virtuelle, une exception StackOverflowError sera levée.

Si la machine virtuelle ne peut pas demander suffisamment d'espace de stockage lors de l'extension de la pile, une exception se produira.

public class StackOutOfMemoryError {
    public static void main(String[] args) {     
         test();
    }
    private static void go() {
        System.out.println("StackOverflowError异常");
        test();
    }
}
/*Exception in thread "main" java.lang.StackOverflowError
    at sun.nio.cs.ext.DoubleByte$Encoder.encodeLoop(DoubleByte.java:617)
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
    at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
    at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
    at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
    at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
    at java.io.PrintStream.write(PrintStream.java:526)
    at java.io.PrintStream.print(PrintStream.java:597)
    at java.io.PrintStream.println(PrintStream.java:736)
    at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:11)
at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:13)*/
Copier après la connexion

3. Débordement de la zone de méthode et du pool constant d'exécution

4. Débordement de mémoire directe native

La capacité de DirectMemory peut être spécifiée via -XX:MaxDirectMemorySize Si elle n'est pas spécifiée, la valeur par défaut est la valeur du tas Java. (- Xmx spécifié) sont les mêmes.

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