नहीं है मैं अपने कोर i7 लैपटॉप पर एक जावा प्रोग्राम चला रहा हूं जिसमें 8 कोर (4 भौतिक, 4 एचटी) हैं। कार्यक्रम 8 समांतर धागे का उपयोग करता है और इसलिए इसे सभी सीपीयू का उपयोग करना चाहिए। '-सेवर' पैरामीटर के साथ चलते समय, यह हर समय 100% पर होता है। इसके बिना, यह लगभग 50% -60% कुल मिलाकर (हमेशा 100% पर चोटियों के साथ बदल रहा है और 30% पर डुबकी)। यहां मुझे अजीब लगता है: जब मैं डीबग में प्रोग्राम चलाता हूं और एक पल का इंतजार करता हूं जहां सीपीयू उपयोग विशेष रूप से कम (30%) होता है और फिर आठ धागे क्या कर रहे हैं, यह देखने के लिए निष्पादन को निलंबित कर दिया जाता है, उनमें से कोई भी अवरुद्ध स्थिति में नहीं है । इसके अलावा, उनके बीच लगभग कोई सिंक्रनाइज़ेशन नहीं है। यहां मैं क्या सोच रहा हूं:जावा सीपीयू उपयोग 100% होना चाहिए ... लेकिन यह
- सर्वर और क्लाइंट वीएम के बीच क्या अंतर है जो सीपीयू को क्लाइंट में 100% तक पहुंचने से रोक देगा?
- सिंक्रनाइज़ेशन की अनुपस्थिति में, धागे को पूरी तरह कोर का उपयोग करने से क्या रोक सकता है? (शायद 1)
संपादित करें: यहां एक विचार है: कोड बड़े सरणी आवंटित करता है और उन्हें बहुत जल्दी जीसी में छोड़ देता है। 'नया SomethingBig()' को कॉल करते समय एक थ्रेड सो जाता है और उस स्मृति को आवंटित करने में समय लगता है? यदि थ्रेड के समूह के लिए वीएम हैंडलिंग आवंटन में एक ही प्रक्रिया है, तो मुझे लगता है कि सिंक्रनाइज़ेशन ब्लॉक के बाहर यादृच्छिक रूप से क्यों रोकना प्रतीत होता है ...
संपादित 2: मुझे पूरा यकीन है कि यह है जीसी के कारण अब। अगर मैं डिफ़ॉल्ट 500 एमबी के बजाय वीएम 1500 एमबी देता हूं तो सीपीयू 100% फिर से पहुंचता है। मुझे लगता है कि मंदी सर्वर मोड में नहीं होती है क्योंकि यह डिफ़ॉल्ट रूप से अधिक मेमोरी का उपयोग करती है।
इसे http://www.yourkit.com/java/profiler/index.jsp – titus
के साथ प्रोफाइल करने का प्रयास करें ["जावा-सर्वर" और "जावा-क्लाइंट" के बीच वास्तविक अंतर? [Http: //stackoverflow.com/questions/198577/real-differences-between-java-server-and-java-client) – Perception
धागे क्या कर रहे हैं? सीपीयू केवल काम? i/o संचालन? – TheBronx