2012-12-12 21 views
5

मैं जावा प्रोग्राम पर काम कर रहा हूं जो अब कुछ समय के लिए फ्रैक्टल कक्षाएं उत्पन्न करता है। तस्वीरों की तरह, छवि जितनी बड़ी होगी, उतनी ही बेहतर होगी जब इसे घटाया जाएगा। कार्यक्रम एक 2 डी ऑब्जेक्ट (प्वाइंट) सरणी का उपयोग करता है, जो किसी बिंदु के मान की गणना के समय लिखा जाता है। यही कारण है कि इस सादगी के लिए संपादित किया जाता है यानी कहने के लिए यह संबंधित मान है में प्वाइंट संग्रहीत किया जाता है, .:जावा हीप हार्ड ड्राइव

Point p = new Point(25,30); 
histogram[25][30] = p; 
बेशक

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

अगली समस्या WriteableRaster है, जिसमें सरणी के समान आयाम होंगे। दोनों ने संयुक्त रूप से स्मृति का एक बड़ा सौदा किया। मैं इसे स्वीकार करने आया हूं, जिस तरह से इसे कई बार किया जाता है, प्रत्येक को कम गुणवत्ता वाले परिणामों के साथ बदलने के बाद।

स्मृति और समय के लिए अनुकूलित करने का प्रयास करने के बाद, मैं इस निष्कर्ष पर आया हूं कि मैं वास्तव में राम द्वारा सीमित हूं। यही वह है जिसे मैं बदलना चाहता हूं। मुझे एक्सएक्सएक्स स्विच (10 जीबी पर सेट) के बारे में पता है। क्या रास्टर और/या सरणी को स्टोर करने के लिए विंडोज़ वर्चुअल मेमोरी का उपयोग करने का कोई तरीका है? मैं इस वजह से महत्वपूर्ण प्रदर्शन हिट के बारे में अच्छी तरह से अवगत हूं, लेकिन गुणवत्ता को कम करने के बदले, वास्तव में बहुत पसंद नहीं लगता है।

+1

मुझे लगता है कि आप [बर्कले डीबी] (http://www.oracle।कॉम/टेक्नवर्क/उत्पाद/बर्कलेडब/ओवरव्यू/दृढ़ता-1608 9 0.html), विशेष रूप से पीओजेओ के लिए एनोटेशन-आधारित दृढ़ता। –

उत्तर

2

ओएस पहले से ही आप के लिए राम और निश्चित रूप से हर प्रक्रिया में हार्ड ड्राइव स्थान बना रही है: कृपया मेरे सवाल (पिछले पैराग्राफ) करने के लिए पहले से ही दिए गए जवाब की जाँच करें। यह आपके विचार से अधिक प्रदर्शन आपदा होगी; प्रभावी ढंग से काम नहीं करने के लिए यह धीमा हो जाएगा।

क्या आप मेमोरी-मैप की गई फ़ाइलों की तलाश में हैं? http://docs.oracle.com/javase/6/docs/api/java/nio/MappedByteBuffer.html

यदि यह वास्तव में स्मृति में किया जाना है, तो मैं शर्त लगाता हूं कि आप कुछ अनुकूलन के साथ अपने स्मृति उपयोग को नाटकीय रूप से कम कर सकते हैं। उदाहरण के लिए, आपकी Point ऑब्जेक्ट अधिकतर ओवरहेड है और डेटा नहीं है। संदर्भ के लिए आवश्यक बाइट्स को गिनें, फिर Object ओवरहेड के लिए, दो ints की तुलना में।

आप अपने एक्स और वाई निर्देशांक के लिए दो बड़े समांतर int सरणी के साथ ओवरहेड को कम कर सकते हैं। बेशक आपको अपने कोड में पहुंच के लिए इसे एन्सेप्लेट करना होगा। लेकिन यह इस डेटा संरचना के लिए आपके स्मृति उपयोग को कम कर सकता है। लाखों कम वस्तुएं भी जीसी रनों को गति देती हैं।

स्मृति में WritableRaster डालने के बजाय, छवि फ़ाइल को सीधे कुछ सरल छवि प्रारूप में लिखने पर विचार करें। बीएमपी बहुत आसान हो सकता है। फिर शायद इसे कुशल रूप से परिवर्तित करने के लिए बाहरी उपकरण का उपयोग करना।

ऑब्जेक्ट ओवरहेड को कम करने के लिए -XX:+UseCompressedOops आज़माएं। JVM रिजर्व को लंबे समय तक रहने वाली वस्तुओं के लिए लगभग सभी ढेर बनाने के लिए -XX:NewRatio=20 या इससे भी अधिक का प्रयास करें। यह वास्तव में आपको अधिक ढेर का उपयोग करने दे सकता है।

+0

मैंने इसे अपने उदाहरण में नहीं दिखाया लेकिन प्वाइंट ऑब्जेक्ट में रंग डेटा भी शामिल है। मुझे प्वाइंट क्लास को कुछ छोटे से बदले में चकना अच्छा लगेगा; हालांकि कम से कम तीन (सबसे बड़ी) कक्षाएं हैं जिन्हें लगभग पूरी तरह से फिर से लिखना होगा। शुरुआत में खराब डिजाइन पसंद। यदि मैं प्रोग्राम को दोबारा लिखता हूं, तो मैं इस मुद्दे को संबोधित करूंगा। क्या आप सीधे जेपीईजी को लिखने के तरीके के बारे में जानते हैं? रास्टर से छुटकारा पाने के लिए एक देवता होगा। यदि नहीं तो मैं बीएमपी को लिखूंगा। जेपीईजी का एकमात्र कारण यह है कि मैंने कोशिश की है, सबसे अच्छा द्रव्यमान छवि Resizer केवल जेपीईजी फ़ाइलों को स्वीकार करता है। – Fractalife

0

ऑपरेटिंग सिस्टम को स्वैप मेमोरी से आवंटित करने के लिए अपने जेवीएम मेमोरी पैरामीटर (एक्सएमएक्स) को कॉन्फ़िगर करने की अनुशंसा नहीं की जाती है। स्पष्ट रूप से कचरा संग्रह तंत्र को ढेर स्मृति के लिए यादृच्छिक पहुंच की आवश्यकता होती है और यदि नहीं, तो कार्यक्रम लंबे समय तक फेंक देगा और संभवतः लॉक हो जाएगा। - कोई जादू की जरूरत

does large value for -Xmx postpone Garbage Collection

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