2010-08-04 16 views
9

मैंने एक जावा प्रोग्राम लिखा है जो विभिन्न मशीनों पर विभिन्न मल्टी-थ्रेडिंग एल्गोरिदम की गति का परीक्षण करता है जिसमें प्रोसेसर की विभिन्न संख्याएं होती हैं।गतिशील रूप से बढ़ रहे जावा हीप स्पेस

कुछ मशीनों पर, विलय सॉर्ट * विफल रहता है क्योंकि इसे बहुत बड़े सरणी पर काम करने के लिए एक बड़े पैमाने पर ढेर स्थान की आवश्यकता होती है। प्रोग्राम चलाने से पहले मैं आसानी से जावा हीप स्पेस को बदल सकता हूं, लेकिन मुझे लगता है कि यह कार्य प्रोग्राम के भीतर से ही अधिक मजबूत और आसान दृष्टिकोण होगा।

क्या जावा प्रोग्राम के दौरान वर्चुअल मशीन से अधिक ढेर स्थान का अनुरोध/प्राप्त करने का कोई तरीका है?

नोट: मुझे समझ में आता है कि मैं प्रोग्राम को "जावा-एक्सएमएक्स 1 जी प्रोग्राम" जैसी स्क्रिप्ट के साथ निष्पादित कर सकता हूं; इस विषय पर मेरी जिज्ञासा अकादमिक में है।

* मेरा कार्यान्वयन इन-लाइन में विलय नहीं करता है। इसके लिए ओ (एन) अतिरिक्त मेमोरी की आवश्यकता है।

+0

मुझे नहीं लगता कि यह संभव है। – helpermethod

उत्तर

2

जावा स्मृति को गतिशील रूप से प्रबंधित करने में सक्षम नहीं था, इस मामले में "जावा हीप स्पेस", इसके विपरीत, यह प्रोग्रामर को इसके बारे में चिंता करने से छुटकारा पाने के लिए डिज़ाइन किया गया था।

संक्षेप में, मुझे यह कहने में डर है कि "malloc()" या "setHeapSize(int byes)" जावा में कुछ भी नहीं है।

जावा पर आप JVM पर उपलब्ध स्मृति के बारे में बाध्य हैं जब आपका प्रोग्राम शुरू होता है। स्मृति प्रबंधन के मामले में यह एक आशीर्वाद और शाप दोनों है।

उस तरह के गतिशील स्मृति आवंटन के लिए आपको C और/या C++ जैसी भाषा का उपयोग करके अपने एल्गोरिदम को लागू करने का उपयोग करना चाहिए।

+0

एआरएम, विंडोज़ के लिए सूर्य जेवीएम -एक्सएमएस और -एक्सएमएक्स द्वारा दी गई सीमाओं के भीतर हीप का आकार बदलता है (यानी अनुरोध या ऑपरेटिंग सिस्टम से मेमोरी देता है)। उदाहरण के लिए आप इसे visualvm में देख सकते हैं। – meriton

+0

वैसे कीवर्ड जावा में नया * व्यावहारिक रूप से malloc() के बराबर है क्योंकि यह C++ में है। लेकिन धन्यवाद; यह चीजों को साफ़ करता है। – Robz

+1

आप अवधारणाओं को मिला रहे हैं। तथ्य यह है कि कोई भी अधिकतम उपलब्ध ढेर आकार को गतिशील रूप से बदलना चाहता है, इस तथ्य से कोई लेना-देना नहीं है कि वीएम को प्रोग्रामर को स्मृति प्रबंधन करने के लिए स्वतंत्र करने के लिए डिज़ाइन किया गया है। मैं, एक sysadmin के रूप में मेरे ऐप की ढेर अंतरिक्ष आवश्यकता गलत गलती हो सकती है, और मैं इसे पुनरारंभ किए बिना इसे बढ़ाना चाहता हूं। यह ढेर अंतरिक्ष का आकार बदलने के लिए तकनीकी रूप से व्यवहार्य है, क्योंकि जेवीएम स्वयं करता है (न्यूनतम से अधिकतम तक)। – ithkuil

6

जहाँ तक मुझे पता है, रनटाइम पर ढेर आकार को नियंत्रित करने का कोई तरीका नहीं है।

हालांकि यह आवश्यक नहीं हो सकता है: आप क्रमशः -Xms और -Xmx स्विच के साथ न्यूनतम और अधिकतम ढेर आकार प्रदान कर सकते हैं। (उदाहरण के लिए -Xms128m -Xmx512m) जेवीएम इन सीमाओं के भीतर वास्तविक ढेर आकार का प्रबंधन करेगा।

2

अधिकतम स्मृति का आकार नहीं है, यह उपयोग पर आधारित गतिशील है।

अधिकतम ढेर आकार उस बिंदु पर होना चाहिए जिस पर आप अधिक स्मृति का उपयोग करने के बजाय प्रोग्राम विफल हो जाएंगे। यह गतिशील रूप से, अकादमिक रूप से भी बदलने के लिए थोड़ा समझ में आता है।

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

  • कोई संबंधित समस्या नहीं^_^