Kann Nashorn Startup Langsamkeit überwunden werden?

9

Ich habe Rhino für eine Skriptkomponente in Grafiken verwendet. Im Projekt laufen ca. 200 kleine Skripte unabhängig voneinander. Sofort nach dem Start der Anwendung sollten die Skripte auf Hochtouren laufen. Rhinos Leistung war ausreichend, aber da Oracle rät, nach Nashorn zu migrieren, stehe ich vor einem Dilemma.

Unten ein Bild, das den Lastunterschied zwischen Rhino und Nashorn bei ungefähr 15.000 Aufrufen der Skripte zeigt. Die Startup-Langsamkeit von Nashorn ist mein größtes Problem.

Hinweis: Dies war wieder bei JDK 1.8.0. JDK 1.8u5 ist ähnlich

Ich hoffe, das Bild ist klar.

Dies ist ein Überblick darüber, wie ich die ScriptEngine verwende:

  • Ich verwende eine Skript-Engine-Instanz,
  • Ich erstelle ein CompiledScript-Objekt für jedes Skript,
  • Ein Swingworker führt einmal eine CompiledScript.eval () aus.
  • Jede halbe Sekunde werden die SwingWorker gestartet.
  • Jedes CompiledScript hat seine eigene SimpleScriptContext-Instanz, die für jede Ausführung wiederverwendet wird.

Im Folgenden habe ich ein Laufzeitprofil aufgenommen, wie beschäftigt die Engine im Laufe der Zeit ist;

Weiß jemand, wie man die anfängliche Langsamkeit von Nashorn überwinden kann?

UPDATE 15. April '15
Habe den gleichen Test mit 200 separaten Skripten auf Java8u45 durchgeführt.
Leistung ist viel besser! Läuft ähnlich schnell wie Rhino auf Java7.

    
Houtman 12.09.2014, 14:53
quelle

1 Antwort

1

In Java 1.8 können Sie Rhino über die API javax.script verwenden, indem Sie diese Maven-Abhängigkeit verwenden und die Engine rhino :

anfordern %Vor%

Startseite hier: Ссылка

Binärdateien: hier

Wenn Sie die neueste Version von Rhino möchten, können Sie sie überschreiben, indem Sie etwas wie folgt hinzufügen:

%Vor%

Binärdateien: hier

Wenn Sie übrigens das neueste Rhino auf Java 1.7 über javax.script verwenden möchten, sollten Sie den Engine-Namen rhino17R5 anfordern oder Sie erhalten zufällig eine Instanz des alten Rhino, das Teil der JRE ist. Der genaue Name der Engine hängt von der Version von rhino-script-engine ab. Für 1.1.1 ist es rhino17R5 .

    
seanf 05.03.2015 08:09
quelle