Cipher Instantzierung

Arvid Kjaer

Mitglied
Hi!

Vielleicht weiß ja jemand warum das so ist: Bei der Erstellung eines Cipher Objektes vergehen auf meinem (schwachen) Rechner ca. 1,5s. Bei der Erstellung eines zweiten Cipher Objektes dagegen dauert es nur 5ms, bei weiteren liegt der Wert sogar nochmals darunter. Jetzte frage ich mich, wie es dazu kommt und was man dagegen machen kann. Meine erste Erklärung wäre, dass es was mit Sammeln von Daten zu tun hat, zb Zufallsdaten für eine Seed oder sonst was. Jedenfalls ist das ganze ziemlich störend.

Java:
long time = System.currentTimeMillis();
try {
    Cipher cipher = Cipher.getInstance("AES"); 
} catch (NoSuchAlgorithmException ex) {
} catch (NoSuchPaddingException ex) {
}
System.out.println((System.currentTimeMillis() - time));
 

Lumaraf

Bekanntes Mitglied
Beim ersten Aufruf wird anscheinend erst der Standard-Provider der VM geladen mit allen Algorithmen die die VM mitliefert. Alle weiteren Aufrufe greifen nur noch auf den dann schon vorhandenen Provider zurück. Alle weiteren Performanceverbesserungen dürften weitestgehend auf Optimierungen des JIT zurückzuführen sein.
 

Arvid Kjaer

Mitglied
Sowas habe ich mir auch gedacht, als ich vorhin ein wenig mit Bounty Castle herumgespielt habe und die erste Instanzierung glatte 4s gedauert hat. Das Ding ist ja auch etwas größer. Leider klingt das ganze nicht sonderlich danach, als könnte man das verbessern. Gibt es irgendwo eine AES Implementierung, die am Besten noch in einer einzelnen class File daher kommt? Ich dachte da an sowas wie die Whirlpool Implementierung . Ich verstehe nicht, warum so etwas nicht verbreiteter ist, auch für andere Algorithmen (von rechtlichen Restriktionen mal abgesehen). Große Libraries oder "schwere" Provider halte ich für suboptimal.
 

Ähnliche Java Themen

Neue Themen


Oben