जावा विशेषज्ञ समयपूर्व अनुकूलन से बचने के महत्व, और स्वच्छ ओओ डिजाइन पर ध्यान केंद्रित करने के महत्व पर जोर देते हैं। मैं इस सिद्धांत को दोबारा लिखने के संदर्भ में इस सिद्धांत को सुलझाने की कोशिश कर रहा हूं जो लंबे तत्वों (कुछ मिलियन) की एक बड़ी श्रृंखला का उपयोग करता है। ऐसा लगता है कि एक ऐरेलिस्ट का उपयोग करने से लगभग 3x लंबे समय तक एक प्राचीन सरणी की स्मृति का उपभोग होगा, और यह बर्बाद कर रहा है कि बहुत सी रैम मेरे लिए एक वैध चिंता की तरह लगती है।सूची <Double> जो डबल [] की रैम का उपयोग करता है?
मैं इसे मेमोरीटेस्टबेन्च क्लास described here का उपयोग करके एक प्रयोग से दूर कर रहा हूं।
package memory;
import java.util.ArrayList;
import java.util.List;
public class ArrayListExperiment {
public static void main(String[] args) {
ObjectFactory arrayList = new ObjectFactory() {
public Object makeObject() {
List<Long> temp = new ArrayList<Long>(1000);
for (long i=0; i<1000; i++)
temp.add(i);
return temp;
}
};
ObjectFactory primitiveArray = new ObjectFactory() {
public Object makeObject() {
long[] temp = new long[1000];
for (int i=0; i<1000; i++)
temp[i] = i;
return temp;
}
};
MemoryTestBench memoryTester = new MemoryTestBench();
memoryTester.showMemoryUsage(primitiveArray);
memoryTester.showMemoryUsage(arrayList);
}
}
और आउटपुट:
memory.ArrayListExperiment$2 produced [J which took 8016 bytes
memory.ArrayListExperiment$1 produced java.util.ArrayList which took 24968 bytes
मेरा प्रश्न है: मैं एक OO सूची के लाभ कैसे काटते कर सकते हैं और अभी भी एक आदिम सरणी के छोटे स्मृति पदचिह्न को बनाए रखने के अपने परीक्षण और उत्पादन इस प्रकार हैं ? मुझे लगता है कि अमरूद उत्तर प्रदान कर सकता है, लेकिन एपीआई के माध्यम से चमक रहा है यह मेरे लिए स्पष्ट नहीं है कि कौन सा वर्ग ArrayList के स्थान पर उपयोग करना है।
किसी भी सुझाव के लिए धन्यवाद।
इस MemoryTestBranch सही है है? मैंने जल्द ही लेख के माध्यम से चले गए हैं और कुछ समय के लिए System.gc() एक के बाद कुछ दिलचस्प दृष्टिकोण देखा है। – rit
वास्तव में, यह सही के बारे में लगता है। एक डबल एक संदर्भ लागत, साथ ही वास्तविक आदिम डबल। 64 बिट जेवीएम में कम से कम एक बार आप डबल के लिए दो गुना अधिक भुगतान करेंगे, और कुछ अतिरिक्त ओवरहेड होगा। – rfeak
rit, मैं उस आलेख में विधि की सफाई पर टिप्पणी करने के लिए योग्य नहीं हूं, लेकिन मुझे विश्वास है कि स्मृति परिणाम सही हैं – Jonah