RAM Optimierung Wildfly

java

#1

Hallo zusammen,

eine Frage zum RAM mit Wildfly. Ich habe folgende Parameter:

-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -Xms2g -Xmx8g -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=3g -Djava.net.preferIPv4Stack=true

Mein Programm lädt verdammt viele csv und txt Dateien ein, das ist ja relativ RAM-fressend. Alle CSV zusammen haben vielleicht 5GB zusammen. Wenn ich nun im Wildfly mir den RAM ansehe, steht da folgendes:

image

Wo kann der comiited-Wert konfiguriert werden ider errechnet der sich? Ich suche irgendwie noch die optimalen Einstellungen um nicht unnötig viel RAM auf dem Server zu zahlen. Vielleicht kann mir jemand helfen


#2

Es gibt da ja mehrere Geschichten.

In einer CSV steht zum Beispiel 1234567890
dass sind 10 Buchstaben mit je mindestens einem Byte, wohl aber eher 2 Byte.
Das ganze passt aber auch in einen Integer mit 4 Byte.
Eine Kombination von Boolschen Werten, sind mit TRUE/FALSE, 4/5 Buchstaben, die aber genauso gut in einem Integer (bis 32-Boolsche Werte) oder einem Bitset untergebracht werden können.
Genauso die Frage ob BigDecimal sein muss, oder ob auch ein Integer in Cent die Anforderungen erfüllt.

Alles jeweils mit entsprechendem Overhead. So gesehen ist es schwierig von 5 GB csv und txt Dateien auf den Speicherverbrauch zu schliessen. Zudem ergibt sich hier auch entsprechendes Optimierungspotential, wenn nicht schon genutzt.

Alleine schon Java9, soll durch die Veränderungen an der Klasse String einiges verbessern. Eventuell einfach mal ein Update wagen und vergleichen?

Zudem ist auch die Frage ob immer alles auch zeitgleich im Speicher vorhanden sein muss. Denn wenn die Daten da sein müssen, dann brauchen sie eben auch Platz. Da bringt auch kein Konfigurieren was.


#3

Danke, die Daten müssen nicht lange im Speicher sein. Zeile wird eingelesen, bisschen was berechnet und weiterverarbeitet (DB schreiben etc) dannach kann das sofort wieder aus dem Speicher entfernt werden. Ich Jede Zeile wird ein Objekt, das Objekt wird verarbeitet und am Ende mit null initialisiert damit es vom GC geholt wird. Java 9 hab ich schon installiert