2014-06-09 2 views
8

우리는 현재 당사 제품 중 하나에 서버 측 스크립팅 기능을 추가하고 있습니다. JSR 223 스크립트 엔진을 평가 중입니다. 우리가 잠재적으로 서버에서 많은 수의 스크립트를 실행하고있을 수 있으므로 특히이 스크립트 엔진의 메모리 사용에 대해 우려하고 있습니다. Rhino (Apple JDK 1.6.0_65-b14-462-11M4609, Mac OS X 10.9.2)와 Nashorn (Oracle JDK 1.8.0-b132)을 비교하면 ScriptEngine 인스턴스 당 메모리 사용량이 크게 차이가 나는 것으로 보입니다.Nashorn ScriptEngine은 얼마나 많은 메모리를 사용합니까?

이것을 테스트하려면 간단한 10 개의 ScriptEngine 인스턴스를 시작한 다음 stdin에서 읽기를 차단하는 간단한 프로그램을 사용합니다. 나는 그 (-dump jmap는 : 형식 = B, 파일 = heap.bin) 힙 덤프을 jmap의를 사용하고 덤프의 관련 스크립트 엔진 인스턴스를 검색 :

import javax.script.*; 
public class test { 
    public static void main(String...args) throws Exception { 
     ScriptContext context = new SimpleScriptContext(); 
     context.setWriter(null); 
     context.setErrorWriter(null); 
     context.setReader(null); 
     ScriptEngine js[] = new ScriptEngine[10]; 
     for (int i = 0; i < 10; ++i) { 
      js[i] = new ScriptEngineManager().getEngineByName("javascript"); 
      js[i].setContext(context); 
      System.out.println(js[i].getClass().toString()); 
     } 
     System.in.read(); 
    } 
} 

밖으로 널링 이유 문맥상의 다양한 리더/라이터 필드는 우리가 사용하지 않기 때문에 사용되며, Rhino에 대한 초기 힙 덤프는 인스턴스 당 오버 헤드의 상당 부분을 차지하고 (공유되지 않는 것으로 보입니다) 제안합니다. 나는 독자를 null로하지 않는 경우 최대 73,832 바이트/인스턴스를가는 13,472 바이트/예 (:

  • 코뿔소 :

    그때는 당 인스턴스 다음 얻을 이클립스 MAT에서 이러한 힙 덤프를 분석 힙 크기를 유지/라이터 필드)

  • Nashorn : 324,408 바이트/예

Nashorn를 기대할 수하는 크기의이 24 배 증가인가? 실행 속도는 우리가 실행할 스크립트 (주로 I/O 바운드)에 대한 주요 관심사가 아니므로 Java 8+에서 사용할 Rhino의 복사본을 보내려하고 있습니다.

+0

무엇을 사용 했습니까? Nashorn의 메모리 오버 헤드를 확인할 수 있습니까? – mxro

+0

우리는 우리 자신의 Rhino 복사본을 출하했습니다. –

답변

관련 문제