Ich versuche, ein Problem zu umgehen, das mich für eine Weile nervt. Zusammenfassend: Auf welcher Basis sollte man einen maximalen Heap-Platz für die Resource-Hogging-Anwendung zuweisen und gibt es einen Nachteil, dass der Tit zu groß ist?Wie man richtig großen Heap-Platz für JVM zuweist
Ich habe eine Anwendung verwendet, um große medizinische Daten zu visualisieren, die bis zu mehrere Gigabyte Speicher essen können, wenn mehrere Imaging-Volumes nebeneinander geöffnet werden. Zwischenspeichern der zu betrachtenden Daten ist für einen reibungslosen Arbeitsablauf unerlässlich. Die Software wird von Windows-Workstations unterstützt und mit einem Bootloader gestartet, der die Heap-Größe zuweist und die Hauptanwendung startet. Der tatsächliche Arbeitsspeicher, der von der Hauptanwendung benötigt wird, ist direkt proportional zu den Daten, die angezeigt werden, und kann vom Bootloader nicht bestimmt werden, da dies das Lesen der Daten erfordern würde, was letztendlich zu viel Zeit verbrauchen würde.
Um sicherzustellen, dass die JVM während des Starts genug Speicher hat, haben wir xmx so groß eingerichtet, wie wir es aufgrund des aktuellen Designs für den maximalen physischen Arbeitsspeicher der Workstation wagen. Aber gibt es da einen Nachteil? Ich habe gelesen (aus einem Beitrag von 2008), dass es für native Prozesse möglich ist, überschüssigen Heap-Speicher zu verschwenden, was während der Laufzeit zu Speicherfehlern führen kann. Sollte ich vielleicht auch vor der Zuweisung von Heap-Speicherplatz nach der Größe des freien virtuellen Speichers oder der Auslagerungsdatei suchen? Wie würdest du mit dieser Situation umgehen?
Oh, und dies ist meine erste Post zu diesen Foren. Schön, Sie alle zu treffen und sanft zu sein! :)
Update:
Danke für alle Antworten. Ich bin mir nicht sicher, ob ich meine Worte richtig formuliert habe, aber mein Problem ist, dass ich keine Ahnung von der Hardware habe, auf der diese Software ausgeführt wird, aber trotzdem so viel Heap-Speicherplatz für die Software wie möglich zuweisen möchte .
Ich kam zu einer Lösung der Zuweisung eines Heap von 70% des physikalischen Speichers, wenn genügend Menge an virtuellem Speicher zur Verfügung steht - weniger sonst.
Besser, Ihre Daten in verschiedenen Redis Shards zwischenzuspeichern und Ihre Apps auf verschiedene jvm zu verteilen. Großer Haufen wird nicht empfohlen. – neohope
Etwas verwandt: http://stackoverflow.com/questions/39462735/how-to-make-jvm-use-the-max-all-remain-memory-of-a-server –