Frage

Ich arbeite in Java-Web-Anwendung. In einigem Abschnitt verwende ich sehr großen Baum Variable, die im Speicher speichern und anhalten (RAM). Kann ich dies in dem virtuellen Speicher (swap) migrieren. Hinweis: riesiger Baum besteht Namen und E-Mail für alle Benutzer, die in Vorschlag Ajax Text-Box verwenden.

War es hilfreich?

Lösung

Es gibt keine Standardmethode in Linux von einem Speicherblock zu zwingen, zu tauschen damit die JVM nicht eine Möglichkeit haben, das Betriebssystem zu fragen, eine solche Aufgabe zu erfüllen.

Das Beste, was Sie tun können, wenn Sie diese Funktionalität wollen, ist es, den Baum und schreiben die Rohdaten in eine Datei dann serialisiert bringen, wenn Sie bereit sind.

Aber Sie wahrscheinlich das nicht wollen, weil auf einen Datenträger zu schreiben ist extrem langsam im Vergleich zu physischen Speicher i / o.

Typischer Fall, lassen Sie die OS Sorgen darüber. Es ist sicher davon ausgehen, es kennt einen besseren Weg, um Speicher zu verwalten als Sie.

Andere Tipps

Lassen Sie das OS Ihren Benutzer kümmern sich um diese verwendet wird.

Ein laufendes Java-Bild, das teilweise Seiten aus zu tauschen ein totes Java-Bild ist. Sobald ein eifriger genug GC Tritte in, erhalten Sie auf Seite alles wieder in. Die Seite ist schlimm genug. Wenn Sie tatsächlich nicht genügend RAM für das Ganze haben, beenden Sie mit einer Tracht Prügel, nicht mehr reagiert Wrack eines Servers. Paged Java ist Bad (tm).

Wenn Sie genügend RAM für das Ganze haben, brauchen Sie nicht brauchen Swap.

Stuff Ihre Liste in einer Datenbanktabelle, auf der Festplatte, indizieren, beschränken Sie Ihre Ergebnismengen und die entsprechenden Abfragen für sie machen. Es wird ein Netto-Gewinn, und die DB der Seiten zwischenspeichern kann es am besten gefällt, so dass Sie nicht über sie denken.

oder mehr RAM erhalten.

Ihr O seinen eigenen Speicher automatisch verwaltet und schiebt Dinge auf die Auslagerungsdatei nach Bedarf.

Wenn Sie eine Menge von Daten haben, können Sie Ihre Daten in einer Datenbank zu prüfen, zu speichern, anstatt ein großen In-Memory-Baumes. Dies würde wahrscheinlich Ihre Anwendung Maßstab besser ermöglichen, und es kann auch die Leistung verbessern -. Es wäre sicherlich eine bessere Leistung geben als das Lesen und die gesamte Struktur auf die Festplatte zu schreiben, wenn Sie einen Datensatz suchen müssen oder ändern

Edit: Sie müssen nicht unbedingt müssen eine eigene Datenbank-Maschine einzurichten. Da Sie gerade jetzt versuchen, alle Ihre Daten im Speicher zu speichern, können Sie wahrscheinlich eine eingebettete Datenbank wie HSQLDB oder SQLite , die Größenbeschränkungen von 16 GB und 2 TB hat, respectively.

Ich finde es interessant, dass jeder ihm sagt, dass Gegenstände auf der Festplatte zu speichern schrecklich schrecklich ineficient ist, und zugleich recomending er eine Datenbank verwenden, die wahrscheinlich einen Fern einen, die Daten auf der Festplatte auf einem anderen Rechner speichern .. wird ..

Sie davon aus, dass das System effizienter sein wird, wenn blind die Auslagerungsdatei Handhabung als die Auslagerungsdatei von Code beeinflusst zu haben wäre, das weiß, was die Zukunft bringt. es ist wesentlich effizienter Speicher zu tauschen, die Sie wissen, wird eine Zeit lang nicht benutzt wird, als es für das System auf alle Elemente im Speicher zu suchen ist, und versuchen Sie effizient in dieser Datei einen Teil davon zu setzen.

Natürlich während falsch sein Du etwas richtig sind .. eine lokale Datenbank wäre der effizienteste Weg, um Daten in einer Datei zu speichern (wo es geschrieben wird und lesen). Wenn Sie keinen Zugang zu einer lokalen Datenbank dann Code ein. A hashmap soll im Speicher und eine geordnete indexiert verknüpfte Liste gespeichert zu werden, ist so konzipiert, auf der Festplatte gespeichert werden. ohne eine Gegenleistung für die Effizienz beider Medien auf die Festplatte direkt aus dem Speicher zu drücken versuchen, ist nicht wirksam.

Wie wäre dies als eine andere Perspektive auf das gleiche Problem: Ich habe viel von PDFs serverseitige Erstellung habe ich 10 ist von 1000 von Kunden erhielt die in der Regel Berichte zur gleichen Zeit des Monats ausgeführt werden soll. Durchschnittliche PDF Größe könnte 7-10Mb sein. Mit einem endlichen Heap verfügbar, die Daten an eine temporäre Datei ‚Swapping‘ ist eine gültige Möglichkeit, die PDF-Dateien zu erstellen, da ich die Content-Length auf die Antwort vor der PDF-Daten festlegen müssen in der Lage sein, um das Streaming auf dem Client.

Vielleicht, statt nur das Design einige nützliche Optionen in Frage könnte sehr nützlich sein. Persönlich Ich suche entweder eine temporäre Datei pro Prozess oder die gleichzeitigen Zugriff von einer einzigen ‚Swap‘ Datei.

Was würden Sie vorschlagen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top