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

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

WBOY
WBOYavant
2023-04-30 16:55:131178parcourir

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)*/

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)*/

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer