2008-09-09 9 views
11

क्या जावा को देशी कोड से संकलित करने से इन दिनों कोई प्रदर्शन प्राप्त किया जा सकता है, या आधुनिक हॉटस्पॉट कंपाइलर्स वैसे भी ऐसा करने के अंत में खत्म हो जाते हैं?जावा कोड को मूल कोड में संकलित करने में प्रदर्शन लाभ?

उत्तर

1

मेमोरी प्रदर्शन या सीपीयू प्रदर्शन? या वे इन दिनों एक ही हैं?

मेरा एकमात्र सबूत अचूक है और एक अलग मंच पर: सी # (.NET 2.0) में सीपीयू-भूखे ऐप्स का एक गुच्छा पोर्ट करने के बाद, मुझे प्रदर्शन में पर्याप्त नुकसान नहीं हुआ (मुझे 10% पर्याप्त नहीं माना जाता है)। अच्छी तरह लिखित कोड विभिन्न वास्तुकलाओं पर अच्छा प्रदर्शन करता प्रतीत होता है।

अधिकांश एप्लिकेशन खर्च के साथ/अपशिष्ट समय:

  • आईओ संचालन है कि स्थिर (संकलन समय) विश्लेषण से लाभ नहीं होगा।
  • खराब एल्गोरिदम जो स्थिर विश्लेषण से लाभ नहीं उठाएंगे।
  • महत्वपूर्ण CPU आंतरिक लूप में खराब मेमोरी लेआउट। हालांकि यह तकनीकी रूप से संभव है कि कंपाइलर्स हमें यहां मदद करते हैं, मुझे अभी तक एक वास्तविक कंपाइलर कुछ भी दिलचस्प नहीं दिख रहा है।

तो मेरे अनुभव के आधार पर, जब तक कि आप एक वीडियो कोडेक नहीं लिख रहे हैं, तो जावा ऐप्स बनाम संकलित करने का कोई फायदा नहीं है, बस हॉटस्पॉट कंपाइलर्स पर निर्भर है।

4

कुछ और अजीब सबूत। मैंने कुछ प्रदर्शन महत्वपूर्ण वास्तविक समय व्यापार वित्तीय अनुप्रयोगों पर काम किया है। मैं फ्रैंक से सहमत हूं, लगभग हर बार आपकी समस्या संकलित होने की कमी नहीं है, यह आपकी एल्गोरिदम या डेटा संरचना है। आधुनिक हॉट-स्पॉट कंपाइलर सही कोड के साथ बहुत अच्छे हैं, उदाहरण के लिए CERN Colt library संख्यात्मक काम के लिए संकलित, अनुकूलित फोरट्रान के 90% के भीतर है।

यदि आप गति के बारे में चिंतित हैं तो मैं वास्तव में एक अच्छा प्रोफाइलर की सिफारिश करता हूं और आपकी बाधाओं के बारे में साक्ष्य प्राप्त करता हूं - मैं YourKit का उपयोग करता हूं और बहुत खुश हूं।

हमने पिछले कुछ वर्षों में एक उदाहरण में गति के लिए मूल संकलित कोड का उपयोग किया है, और ऐसा इसलिए था कि हम CUDA का उपयोग कर सकते हैं और कुछ गंभीर GPU प्रदर्शन प्राप्त कर सकते हैं।

2

आपका प्रश्न एक छोटे से बड़ा है, इस सवाल का जवाब एक बहुत भिन्न हो

  • आप बस समय संकलन (JIT) में या उपयोग कर रहे हैं नहीं
  • जब आप उपयोग कर रहे हैं ,, अपनी प्रक्रिया के लिए मार डाला है, तो एक लंबा समय या

सभी हालिया जेवीएम जेआईटी का उपयोग करते हैं, लेकिन पुराने जेवीएम पर जावा कोड कई बार धीमी है कि मूल कोड।

यदि आपके पास एक ऐसा सर्वर है जो लंबे समय तक या बैच के लिए चलाता है जो एक ही कोड को बार-बार निष्पादित करता है, तो अंतर और बहुत कम होना चाहिए।

हमने सी ++ और जावा में दोनों को एक ही बैच लिखा और इसे विभिन्न डेटासेट के साथ चलाया, परिणाम लगभग 3 सेकंड के लिए भिन्न होता है, डेटासेट 5 मिनट से लेकर कई घंटों तक ले जाता है।

लेकिन सावधान रहें, वे विशेष मामले हैं कि एक महत्वपूर्ण अंतर होगा, उदाहरण के लिए बैच जिसे बहुत मेमोरी चाहिए।

-2

ओवरहेड की जांच करने के लिए केवल छह अलग-अलग कार्यान्वयन के साथ हैलो-वर्ल्ड का प्रयास किया और अंतर चौंकाने वाला था। जावा चार्ट से बाहर था जबकि संकलित भाषाओं ने समान रूप से अच्छा प्रदर्शन किया था। यदि आवश्यक हो तो मैं सभी साक्ष्य (पुनरुत्पादित में) साबित कर सकता था।

+1

हैलो वर्ल्ड वास्तविक जीवन वर्कलोड का प्रतिनिधित्व नहीं करता है, और मुझे संदेह है कि यह JVM द्वारा अनुकूलित है। इस तरह के बहुत छोटे मामलों के लिए, संकलित भाषाओं की तुलना में जावा खोने की संभावना है। – nhahtdh

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