Dies wird ein böserer Artikel sein. In der Welt von Java ist der Speicherüberlauf nur ein Fehler, den Sie in diesem Fall möglicherweise vorstellen können. Ihre Opfer verbringen ein paar Tage oder sogar ein paar Wochen Schlafnächte im Büro.
In diesem Artikel werde ich zwei Arten von Überlaufmethoden einführen, die leichter zu verstehen und zu reproduzieren sind. Und sie sind alle Fallstudien des Quellprojekts, aber um Sie klar zu verstehen, vereinfache ich sie.
Seien Sie jedoch versichert, dass ähnliche Fälle häufiger vorkommen, als Sie sich vorstellen, nachdem wir den überfüllten Fehler begegnet und gelöst haben.
Geben Sie zuerst den Status ein.
Klasse KeylessEntry {statische Klassenschlüssel {Integer ID; Args) {map M = neuer HashMap (); "Nummer:" "" + i);}}Wenn Sie den oben genannten Code ausführen, können Sie erwarten, dass er nie ein Problem läuft. Dies ist jedoch nicht der Fall. Elemente werden immer wachsen, da die Schlüsselkategorie nach HashCode () keine geeignete Equals () -Methode implementiert.
Die Lösung ist einfach, solange Sie eine gleiche Methode wie das folgende Beispiel hinzufügen. Bevor Sie das Problem gefunden haben, müssen Sie viele wertvolle Gehirnzellen verbracht haben.
@Overridepublic boolean Equals (Objekt o) {boolean response = false; Die nächste, die Sie an Ihre Freunde erinnern müssen, besteht darin, mit String umzugehen. Seine Leistung wird seltsam sein, insbesondere wenn der Unterschied zwischen JVM Version kombiniert wird. Der interne Arbeitsmechanismus von String wurde in JDK 7U6 geändert. Wenn Sie also feststellen, dass die Produktumgebung nur der Unterschied zwischen einer kleinen Versionsnummer ist, sind Sie bereit für die Bedingungen. Zacken Sie den Code ähnlich dem folgenden Code und fragen Sie ihn dann, warum dieser Fehler nur im Produkt erscheint.
Klasse Stringer {statische int mb = 1024*512; nanotime ()); = createlongString (MB);Was ist los mit dem obigen Code? Wenn es vor der Version des JDK 7U6 ausgeführt wird, speichert die zurückgegebene Zeichenfolge eine Referenz auf die Größe von etwa 1 m. In Kombination mit den Unterschieden zwischen Plattformen und Versionen in Ihrer experimentellen Umgebung treten Dinge, die den heiligen Schriften des Gehirns verletzen, auf.
Wenn Sie jetzt Ihre Fußabdrücke vertuschen möchten, können wir einige fortgeschrittenere Konzepte einführen. Zum Beispiel
Ich hoffe, wir geben Ihnen einige Rohstoffe, die an und einige Materialien denken, wenn Sie jemanden reparieren möchten. Dies wird endloses Debuggen bringen. Es sei denn, Ihr Freund verwendet Plumbr, um den überfüllten Ort zu finden.