Nashorn은 즉시 JVM 바이트 코드로 컴파일된다는 것을 알고 있습니다. 그러나 Nashorn은 String을 사용하여 eval 함수를 만날 때 무엇을합니까? 문자열 내용을 컴파일하거나 해석합니까?Nashorn Javascript는 "eval"문장을 컴파일합니까?
function sayHi() {
console.log("hi world");
}
for (var i=0;i<10;i++) {
eval("sayHi()"); // what happens here?
}
몇 가지 옵션이 될 수있다 : 예를 들어
1)은 다음 캐시, 평가 후면 2) 번을 컴파일 내에서 문자열을 컴파일하지 않고는 같은 바이트 코드를 재사용 위의 루프에서와 같이 동일한 문자열을 발견하면 3) 매번 eval String의 내용을 다시 컴파일합니다.
물론이 예제는 eval 문자열의 내용 그냥 메서드 호출이지만 그것은 더 복잡한 JS 코드 문자열로 전달되는 상상 int 평가.
하드 코드 된 문자열에'eval()'을 사용하는 것은 거의 요지가 없습니다. 일반적으로'eval()'이 권장되는 것은 아니지만 사용하려고한다면 일반적으로 동적으로 생성 된 문자열을 전달해야합니다 컴파일 타임에 알려지지 않은 값으로 – nnnnnn
자, eval에 대한 문자열이 동적이라고 가정 해 봅시다. 그런 다음 먼저 JIT를 임시 클래스로 컴파일 한 다음 즉시 클래스를 언로드합니다. 아니면, Rhino 해석 모드와 비슷한 방식으로 해석됩니까? 또는 다른 옵션? – adamM