Java auf Ubuntu beschleunigen…
Java, Linux/OpenSource, ubuntuusers.de Januar 7th, 2010Java benoetigt eine ganze Menge an verschiedenen Klassen, selbst um einfache Programme auszuführen. Ich habe mich mit den verschiedenne JVM Optionen der Sun Java virtual machine beschäftigt. Seit Java 5, bzw. dem JDK 5, gibt es Classdata sharing. Nicht nur, dass die Daten geshared werden können, sie koennen sogar fuer die Plattform aufbereitet werden, und können dann per memory map einer einzelnen Datei eingeblendet werden.
Das reduziert die Startzeit natürlich enorm – bei groesseren Programmen wie z.B. Eclipse fällt das jedoch geringer ins Gewicht, da es sich um Fixkosten handelt.
Diese Cache Datei lässt sich mittels
sudo java -client -Xshare:dump
(bzw. -server
)
generieren. Der Effekt zeigt sich bei einem kleinen Programm am deutlichsten:
Um sicher zu stellen, dass der Systemcache nicht die Ergebnisse zu sehr beeinfluss, habe ich vor jedem Testlauf
echo 3 > /proc/sys/vm/drop_caches
durchgeführt. Hier die niedrigsten Werte von fünf Läufen ohne und mit Classdata sharing dump.
time java -client Demo
Demo for Fibonacci numbers:
Fibonacci 3: 5
real 0m3.050s
user 0m0.112s
sys 0m0.092s
Mit classdata sharing
time java -client Demo
Demo for Fibonacci numbers:
Fibonacci 3: 5
real 0m1.614s
user 0m0.056s
sys 0m0.052s
Man sieht deutlich, dass sich die Ersparniss bei einem kleinen Programm deutlich bemerkbar macht, jedoch lediglich bei kalten Cache. Sobald das Betriebssystem die nötigen Daten im eigenen Cache hat, fällt die Ausführungszeit auf deutlich unter 100ms. Bei der Server JVM ist von dem Cache aufgrund des initialen Compilevorgangs und der Optimierung auf hohe Ausführungsgeschwindigkeit im Gegensatz zur Startgeschwindigkeit bei der Client VM sowieso kaum noch etwas zu spüren. In so fern dürfte das auf der Devoxx 2009 angekündigte Update des JAR Formats erheblich mehr bringen.
Neue Kommentare