2009-12-10 6 views
8

से अधिक है मैंने Out Of Memory help from sun's site का उपयोग किया था। मैंस्मृति से बाहर अनुकरण कैसे करें: अनुरोधित सरणी आकार VM सीमा

javac *.java;java -Xmx256m JavaTest 

लेकिन इसके बाद के संस्करण लाइन

 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at JavaTest.main(JavaTest.java:7) 

उत्पादन के साथ अपने मशीन पर द्वारा

import java.util.ArrayList; 
import java.util.List; 

public class JavaTest { 
    public static void main(String[] args){ 
     long[] ll = new long[64*1024*1024]; 
    } 
} 

इस अनुकरण करने की कोशिश की है, जहां यह रूप में

Out Of Memory : Requested array size exceeds VM limit

This indicates that the application attempted to allocate an array that is larger than the heap size. For example, if an application tries to allocate an array of 512MB but the maximum heap size is 256MB, then this error will be thrown. In most cases the problem is likely to be either that the heap size is too small or that a bug results in the application attempting to create an array whose size is calculated to be incorrectly huge.

उद्धृत किया गया है क्या क्या मैं याद कर रहा हूँ

अद्यतन: मेरे जावा संस्करण है

 
$java -version 
java version "1.6.0_15" 
Java(TM) SE Runtime Environment (build 1.6.0_15-b03) 
Java HotSpot(TM) Server VM (build 14.1-b02, mixed mode) 

उत्तर

18

के लिए मुझे

long[] l = new long[Integer.MAX_VALUE]; 

पैदावार Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit

 

पुनश्च: यदि आप परीक्षण के लिए अपवाद उत्पादन की जरूरत है, तो आप कर सकते थे भी सिर्फ throw new OutOfMemoryError("Requested array size exceeds VM limit") खुद।

+1

धन्यवाद। यह भी मेरे लिए काम कर रहा है। लेकिन मेरे कोड ने पहले क्यों काम नहीं किया? – DKSRathore

+0

ठीक है।तो मेरा सिस्टम इस अपवाद को 1024 * 1024 * 1024-2 की सीमा में Integer.MAX_VALUE – DKSRathore

+1

@Adrian तक बना रहा है, मैं अपनी वीएम सीमा कैसे जानूं? – DKSRathore

0

आवंटन, कहते हैं, एक ArrayList की कोशिश करो और इसके आकार रन-टाइम दोगुना करने के लिए।

+1

यह फिर से मुझे अपवाद की तरह धागे में "मुख्य" java.lang.OutOfMemoryError दे रही है (Arrays.java:2734) \t java.util.ArrayList.ensureCapacity (ArrayList.java:167) \t java.util.ArrayList.add (ArrayList.java:351) \t पर JavaTest.main पर (JavaTest पर। जावा: 27) – DKSRathore

1

सरणी को निरंतर ढेर स्थान के रूप में आवंटित किया जाता है और ऑब्जेक्ट आवंटन और कचरा संग्रह के कारण स्मृति को खंडित किया जा सकता है। मेमोरी त्रुटि से बाहर सरणी आवंटित करने के लिए स्मृति के ठोस ब्लॉक की कमी के कारण होता है। क्या आपने जेएमवी मेमोरी को स्पष्ट रूप से -एक्सएमएक्स ध्वज के साथ भेजा था?

+0

हाँ मैंने किया। javac * .java; जावा -Xmx1000m जावाटेस्ट – DKSRathore

0

बस उदाहरण के लिए लोगों को यह समस्या है जब लोग जावा मूल इंटरफेस का उपयोग कर रहे हैं, सी ++ अनुप्रयोगों के बीच पुल।

शुद्ध जावा एप्लिकेशन चलाते समय मानक प्रक्रिया एक सरणी आवंटित करने के लिए प्रतीत होती है, एरे डिकलेरेशन में java.lang.OutOfMemoryError: Java heap space अपवाद फेंकने वाले आकार चर से आवश्यक बाइट्स की गणना की जाती है।

जब जेवीएम के बाहर सरणी बनाई जाती है तो ऐसा लगता है कि यह इस अन्य अपवाद को उत्पन्न करता है। मुझे यकीन है कि इस अलग व्यवहार के लिए कुछ तकनीकी कारण हैं।

आप इस other forum पर इस व्यक्ति का वर्णन करने वाली समस्या को दोहराने का प्रयास कर सकते हैं। जावा ढेर अंतरिक्ष java.util.Arrays.copyOf (Arrays.java:2760) पर \t \t java.util.Arrays.copyOf पर:

+0

उत्तर के लिए धन्यवाद। लेकिन फोरम लिंक भी यह नहीं बता रहा है कि यह क्यों हो रहा है? क्या वीएम सीमा त्रुटि मूल स्मृति के साथ अधिक चिंतित है कि वीएम मेमोरी? – DKSRathore

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