2 Stimmen

Über OutOfMemoryError und Möglichkeiten der Fehlerbehebung

Durch Versuch und Irrtum habe ich gelernt, dass 11_451_104 ist die magische Zahl, die bei meinem Rechner den OOM-Fehler auslöst.

Verwendung von 11_451_103 Ich packe so viele Daten hinein, wie ich aufnehmen kann.

private static void init() {
    int i = 0;
    try {
        while (++i < 11451104) {
            list.add("a");
        }
    } catch (OutOfMemoryError e) {
        System.out.println("oh no, not again :("); // <-- Not getting here
    }
}

Wenn ich in der nächsten Zeile

    String x = "some new string";

Ich würde erwarten, dass eine Ausnahme auftritt, da der Heap keinen Platz für eine weitere Zeichenfolge zuweisen kann. Doch das ist nicht der Fall.

Wenn ich versuche, diese neue Zeichenfolge in die Liste aufzunehmen,

    String x = "some new string"; // <-- expect OOM Error to happen here
    list.add(x);

Das Programm bricht mit OOM ab. Warum geschah dies nicht bei der Zuweisung von Zeichenketten?

Wie kann man sich am besten schützen, wenn man weiß, dass OOM eine Möglichkeit ist, da eine unbekannte (möglicherweise sehr große) Menge an Daten gespeichert werden muss? Ist Serialisierung und Persistenz auf der Festplatte ein guter Weg, um damit umzugehen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X