2014-06-09 8 views
8

हम वर्तमान में हमारे उत्पादों में से एक के लिए सर्वर-साइड स्क्रिप्टिंग क्षमता जोड़ने की प्रक्रिया में हैं। इस के हिस्से के रूप में मैं जेएसआर 223 स्क्रिप्ट इंजन का मूल्यांकन कर रहा हूं। चूंकि हम संभावित रूप से सर्वर पर बड़ी संख्या में स्क्रिप्ट चला रहे हैं, इसलिए मैं विशेष रूप से इन स्क्रिप्ट इंजनों के स्मृति उपयोग के बारे में चिंतित हूं। नैशोर्न (ओरेकल जेडीके 1.8.0-बी 132) के साथ राइनो (ऐप्पल जेडीके 1.6.0_65-बी 14-462-11 एम 460 9, मैक ओएस एक्स 10.9.2) की तुलना में स्क्रिप्टइंजिन उदाहरण प्रति मेमोरी उपयोग में नाटकीय अंतर लगता है।एक नैशर्न स्क्रिप्टइंजिन का कितना मेमोरी उपयोग करता है?

इसका परीक्षण करने के लिए, मैं एक साधारण प्रोग्राम का उपयोग करता हूं जो 10 खाली स्क्रिप्टइंजिन उदाहरणों को निकाल देता है और फिर stdin से पढ़ने को अवरुद्ध करता है। मैं तो jmap का प्रयोग कर एक हीप डंप लेने के लिए (-dump jmap: प्रारूप = ख, फ़ाइल = heap.bin) और फिर डंप में प्रासंगिक स्क्रिप्ट इंजन उदाहरण के लिए खोज:

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(); 
    } 
} 

बाहर nulling के लिए कारण संदर्भ में विभिन्न पाठक/लेखक फ़ील्ड इसलिए है क्योंकि हम उनका उपयोग नहीं करते हैं, और पहले राइनो के लिए ढेर डंप सुझाव देते हैं कि वे प्रति-उदाहरण ओवरहेड का एक महत्वपूर्ण अंश बनाते हैं (और साझा नहीं किए जाते हैं)।

  • राइनो:

    का विश्लेषण ग्रहण मेट में इन ढेर डंप तो मैं प्रति-उदाहरण निम्नलिखित मिल ढेर आकार को बनाए रखा 13,472 बाइट्स/उदाहरण (चला जाता है अप करने के लिए 73,832 बाइट्स/उदाहरण अगर मैं पाठक शून्य नहीं है/लेखक क्षेत्रों)

  • Nashorn: 324,408 बाइट्स/उदाहरण

आकार में इस 24x वृद्धि Nashorn उम्मीद की जा करने के लिए है? निष्पादन की गति उन स्क्रिप्ट्स के लिए एक प्रमुख चिंता नहीं है जिन्हें हम निष्पादित करेंगे (जो अधिकतर I/O बाध्य होगा), इसलिए मैं जावा 8+ में उपयोग के लिए राइनो की अपनी प्रति शिपिंग शिपिंग पर विचार कर रहा हूं।

+0

आपने यो का उपयोग करके क्या किया? क्या आप नैशर्न के लिए मेमोरी ओवरहेड की पुष्टि कर सकते हैं? – mxro

+0

हमने राइनो की अपनी प्रति भेज दी। –

उत्तर

-1

https://seniorjava.wordpress.com शायद यह लिंक मदद कर सकता है। सुनिश्चित नहीं है कि आप अभी भी इस पर काम कर रहे हैं।

संबंधित मुद्दे