工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java 8 Nashorn JavaScriptエンジン:性能向上と新ツールjjs

Java 8では、既存のRhinoに代わって、大幅に改善されたJavaScriptエンジン「Nashorn」が導入されました。Nashornはコードをメモリ内で直接コンパイルし、バイトコードをJVMに渡すため、2〜10倍の性能向上を実現しています。また、Java 7で導入されたinvokedynamic機能を活用してパフォーマンスをさらに高めています。

jjsコマンドラインツール

Nashornエンジン用に、Java 8ではコンソールでJavaScriptコードを実行するための新しいコマンドラインツールjjsが導入されました。

JavaScriptファイルの実行

sample.jsファイルを作成し、c:\> JAVAフォルダに保存します。

sample.js

print('Hello World!');

コンソールを開き、以下のコマンドを実行します:

C:\JAVA>jjs sample.js

以下の出力が生成されます:

Hello World!

jjsのインタラクティブモード

コンソールを開き、以下のコマンドを実行します:

C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

引数の渡し方

コンソールで以下のコマンドを実行します:

C:\JAVA> jjs -- a b c
jjs> print('letters: ' + arguments.join(", "))
letters: a, b, c
jjs>

JavaからJavaScriptの呼び出し

ScriptEngineManagerを使用して、Java内でJavaScriptコードを呼び出し、解釈実行できます。

例

任意のエディタで以下のJavaプログラムを作成してください(例:C:\> JAVA)。

Java8Tester.java

Live Demo
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

public class Java8Tester {
    public static void main(String args[]) {
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
        String name = "Mahesh";
        Integer result = null;
        try {
            nashorn.eval("print('" + name + "')");
            result = (Integer) nashorn.eval("10 + 2");
        } catch (ScriptException e) {
            System.out.println("Error executing script: " + e.getMessage());
        }
        System.out.println(result.toString());
    }
}

実行結果の確認

javacコンパイラでコンパイルします:

C:\JAVA>javac Java8Tester.java

実行します:

C:\JAVA>java Java8Tester

以下の結果が出力されます:

Mahesh
12

JavaScriptからJavaの呼び出し

以下の例は、JavaScript内でJavaクラスをインポートして使用する方法を示しています。

sample.jsを作成し、c:\> JAVAフォルダに保存します。

sample.js

var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
    var result = new BigDecimal(amount).multiply(new BigDecimal(percentage)).divide(
        new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
    return result.toPlainString();
}
var result = calculate(568000000000000000023, 13.9);
print(result);

コンソールで以下のコマンドを実行します:

C:\JAVA>jjs sample.js

以下の出力が生成されます:

78952000000000000003.20

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java拡張forループをマスター:構文、例、ベストプラクティス
  4. Java文字列をマスター:生成、メソッド、ベストプラクティス
  5. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  6. Java無名インナークラス完全ガイド:定義、構文、実践例
  7. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  8. Javaアノテーション完全ガイド:種類、配置場所、実践例
  9. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
  10. Java Vectorの理解:使い方、特徴、ArrayListとの比較
  11. Java 8 Nashorn JavaScriptエンジン:性能向上と新ツールjjs