>  기사  >  Java  >  Java의 새로운 기능인 Nashorn의 예제에 대한 자세한 설명

Java의 새로운 기능인 Nashorn의 예제에 대한 자세한 설명

零下一度
零下一度원래의
2017-06-17 14:04:091808검색

본 글은 자바의 새로운 기능인 나스호른(Nashorn) 관련 정보를 주로 소개합니다. 필요하신 분들은 참고하시면 됩니다.

나스호른(Nashorn)은 무엇인가요? 제2차 세계대전 당시의 독일 전차이자 java8의 차세대 javascript 엔진이기도 합니다. 오래되고 느린 Rhino를 대체하며 ECMAScript-262 버전 5.1 언어 사양을 준수합니다. javascript는 웹 브라우저에서 실행되고 html에서는 다양한

dom 연산

을 제공한다고 생각할 수 있지만 Nashorn은 브라우저 DOM 객체를 지원하지 않습니다. 이것은 주목할 점입니다. Nashorn 시작 정보

Jjs 도구와 javax.script 패키지의 API라는 두 가지 측면이 있습니다. jjs는 java_home/bin에 있습니다. 예를 들어 func를 만들어 보겠습니다. .js의 내용은 다음과 같습니다.

function f() {
return 1;
};
print( f() + 1 );

이 파일을 실행하고 이 파일을 jjs


jjs func.js

에 매개변수로 전달합니다. 출력 결과: 2


또 다른 측면은 javax.script입니다. 이전에는 Rhino의 왼쪽입니다. API

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName( "JavaScript" );
System.out.println( engine.getClass().getName() );
System.out.println( "Result:" + engine.eval( "function f() { return 1; }; f() + 1;" ) );

출력은 다음과 같습니다.


jdk.nashorn.api.scripting.NashornScriptEngine
Result: 2
Nashorn VS Rhino

javascript는 jdk6에 이미 존재했지만 이제 Rhino를 대체해야 하는 이유는 무엇입니까? Rhino에 비해 다른 자바스크립트 엔진(예: Google V8)은 너무 느립니다. Rhino를 변환하려면 다시 작성하는 것이 좋습니다. 성능은 Nashorn의 하이라이트이므로 아래의 성능 비교를 테스트해 보겠습니다. 둘 사이의 성능을 비교하려면 ECMAScript 구문 분석 프레임워크인 Esprima를 사용하여 압축되지 않은 버전의 jquery(약 268kb)를 구문 분석해야 합니다.


static void rhino(String parser, String code) {
    String source = "speedtest";
    int line = 1;
    Context context = Context.enter();
    context.setOptimizationLevel(9);
    try {
      Scriptable scope = context.initStandardObjects();
      context.evaluateString(scope, parser, source, line, null);
      ScriptableObject.putProperty(scope, "$code", Context.javaToJS(code, scope));
      Object tree = new Object();
      Object tokens = new Object();
      for (int i = 0; i < RUNS; ++i) {
        long start = System.nanoTime();
        tree = context.evaluateString(scope, "esprima.parse($code)", source, line, null);
        tokens = context.evaluateString(scope, "esprima.tokenize($code)", source, line, null);
        long stop = System.nanoTime();
        System.out.println("Run #" + (i + 1) + ": " + Math.round((stop - start) / 1e6) + " ms");
      }
    } finally {
      Context.exit();
      System.gc();
    }
  }
  static void nashorn(String parser, String code) throws ScriptException,NoSuchMethodException {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("nashorn");
    engine.eval(parser);
    Invocable inv = (Invocable) engine;
    Object esprima = engine.get("esprima");
    Object tree = new Object();
    Object tokens = new Object();
    for (int i = 0; i < RUNS; ++i) {
      long start = System.nanoTime();
      tree = inv.invokeMethod(esprima, "parse", code);
      tokens = inv.invokeMethod(esprima, "tokenize", code);
      long stop = System.nanoTime();
      System.out.println("Run #" + (i + 1) + ": " + Math.round((stop - start) / 1e6) + " ms");
    }
    // System.out.println("Data is " + tokens.toString() + " and " + tree.toString());
  }

코드에서 볼 수 있듯이 테스트 프로그램은 Esprima의 구문 분석과 토큰화를 실행하여 테스트 파일의 내용을 각각 30번 실행합니다. 처음에 Rhino는 1726ms가 걸리고 천천히 가속되며 최종적으로 약 950ms에서 안정화되었습니다. Nashorn은 또 다른 기능을 가지고 있습니다. 첫 번째 실행에는 3682ms가 걸렸지만 워밍업 후 빠르게 가속되었으며 마지막으로 그림과 같이 각 실행마다 175ms로 안정화되었습니다. 아래 그림에서


nashorn이 먼저 컴파일됩니다. javascript 코드는 java bytecode이고, 그 다음 jvm에서 실행됩니다. 맨 아래 레이어도 informodynamic 명령을 사용하여 실행되므로 실행 속도가 매우 빠릅니다.

Java를 사용하여 javascript를 구현하는 이유

이것은 또한 대부분의 학생들이 동의하는 견해입니다. 1. 성숙한 JIT 컴파일러

3.

4. 풍부한 표준 라이브러리 및 타사 라이브러리

일반적으로 Java 플랫폼의 기존 리소스를 최대한 활용합니다.

요약

새 Rhino는 Rhino보다 훨씬 빠른 코뿔소 스타일의 마차라고 할 수 있습니다. 고성능 JavaScript 실행 환경인 Nashorn에는 많은 가능성이 있습니다. 예를 들어 Avatar.js는 Nashorn을 사용하여 JVM에서 Node.js 프로그래밍 모델 구현을 지원하고 내장된 로드 밸런서를 사용하여 여러 이벤트 루프를 구현하는 등의 다른 새로운 기능도 추가합니다. 멀티스레딩을 사용하여 경량 메시징 메커니즘 구현 Avatar는 JPA 기반 순수 JavaScript ORM 프레임워크인 Model-Store도 제공합니다.

기업에서 Nashorn을 활용하는 또 다른 방법은 스크립팅입니다. 일반적으로 Linux와 같은 쉘 스크립트를 사용하는 것과 비교하면 이제

Javascript스크립트를 사용하여 Java와 상호 작용할 수 있으며 Nashorn을 사용하여 REST 인터페이스를 통해 서버 작업을 모니터링할 수도 있습니다. . 상황.

위 내용은 Java의 새로운 기능인 Nashorn의 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.