2016-04-05 7 views
0

Ich benutze IntelliJ und ich lade eine große Anzahl von Dateien im Speicher. Jedes Mal, wenn ich die App starte, dauert es eine gewisse Zeit, sie zu laden.Gibt es eine Möglichkeit, riesige Java-Variablen im Speicher zu halten, um Ladezeit zu sparen?

Gibt es eine Möglichkeit, sie zwischen den Läufen im Speicher zu halten?

+0

Nein, aber Sie können eine In-Memory-Datenbank verwenden, die Ihre Zeit spart. – visingh

+0

können Sie einen vorschlagen? – user15860

Antwort

3

Gibt es eine Möglichkeit, [die geladenen Dateien] zwischen den Läufen im Speicher zu behalten?

In einem Wort, nein.

Das Beste, was Sie tun könnten, wäre, die Ladezeit zu optimieren oder Ihre Anwendung so zu strukturieren, dass nicht alle Dateien geladen werden müssen.

Hier sind Vorschläge:

  • Statt Laden alle Daten in den Speicher des JVM, sollte sie in einem herkömmlichen oder "NoSQL" -Datenbank (auf Diskette oder im Speicher)

  • Neustrukturieren Sie die Anwendung/partitionieren Sie das Problem so, dass Sie nicht alles im Speicher gleichzeitig benötigen.

  • Laden Sie die Dateien langsam.

  • Greifen Sie auf die Informationen in den Dateien über speicherabgebildete Puffer zu, und vermeiden Sie, alles in Heap-Objekte umzuwandeln.

Keine dieser Ideen wird einfach sein. Und ich kann nicht vorhersagen, welche (wenn überhaupt) effektiv sein wird ... ohne viel mehr Informationen darüber, was Sie zu tun versuchen.


1 - Das heißt, im Speicher in einem separaten Datenbank-Server oder Server. Wenn Sie die In-Memory-Datenbankserver starten/neu starten, müssen sie natürlich die Daten von der CD laden, aber Sie können viele Ihrer Anwendungs-JVMs seriell oder gleichzeitig mit der Datenbank sprechen lassen.

1

Eine Lösung wäre, die Anwendung in zwei kleinere Anwendungen umzuwandeln, die über den Loopback miteinander kommunizieren. Eine der Anwendungen kann für die Bereitstellung der Dateien und die andere für deren Verwendung verantwortlich sein. Die Anwendung, die die Dateien bedient, kann in einem Speichercache der Dateien bis zu einer bestimmten Speichergrenze unter Verwendung von Byteanordnungen speichern.

Sie können dann die Anwendung neu starten, die sie so oft verwendet, wie Sie möchten, ohne die Anwendung neu starten zu müssen, die die Dateien bedient (und zwischenspeichert).

Sie müssen nicht einmal die Anwendung in zwei Teile teilen. Linux zum Beispiel Cache-Dateien im Speicher. Es hilft also, den Dateisystem-Cache zu optimieren, so dass möglichst viele dieser Dateien im Speicher abgelegt werden. Es gibt viele Konfigurationsoptionen, die berücksichtigt werden müssen. Wie lange sollen die Dateien im Cache verbleiben? Wie groß sind die Dateien relativ zur maximalen Cachegröße?Die Antwort auf die folgende Frage wirft ein Licht auf diese:

https://unix.stackexchange.com/questions/30286/can-i-configure-my-linux-system-for-more-aggressive-file-system-caching

Es kann auch erforderlich sein, um die JVM Implementierung überprüfen, dass Sie verwenden, nur um sicher zu machen, es wird nicht den Cache umgehen und eine Kraft Festplatte gelesen, obwohl ich ernsthaft bezweifle, dass dies passieren würde.

+0

Schön, danke – user15860

Verwandte Themen