Maison > Java > javaDidacticiel > le corps du texte

Quelles sont les quatre situations de débordement de mémoire Java ?

WBOY
Libérer: 2023-04-30 16:55:13
avant
1185 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. Pile de machine virtuelle et débordement de pile de méthodes locales

Si la profondeur de pile requise par le thread est supérieure à la profondeur autorisée par le verrou de la machine virtuelle, puis lève une exception StackOverflowError.

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. 🎜#DirectMemory La capacité peut être spécifiée via -XX:MaxDirectMemorySize Si elle n'est pas spécifiée, la valeur par défaut est la même que la valeur du tas Java (spécifiée par -Xmx).

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