2009-11-21 13 views
14

मैं जावा बाईटकोड जानने की कोशिश कर रहा हूँ और मैं इस पर ठोकर खाई: मैं -g विकल्प के साथ यह बहुत ही सरल कोड संकलित:स्थानीय चर

public class Test 
{ 
public static void main(String args[]) 
{ 
    double a = 1.0; 
    int b = (int)a; 
} 
} 

मुख्य कोड निकला हो:

0 dconst_1 
1 dstore_1 
2 dload_1 
3 d2i 
4 istore_3 
5 return 

इसके अतिरिक्त, मुख्य अधिकतम अधिकतम चर 4 है, और स्थानीय वैरिएबलटेबल में केवल 3 प्रविष्टियां हैं (तर्क, ए, बी)। मुझे यह जानकर उत्सुकता है कि क्यों कंपेलर ने 4 स्थानीय चर सुरक्षित किए हैं जबकि स्पष्ट रूप से केवल 3 है, और localvariable[2] का उपयोग नहीं किया जाता है। क्या मुझे कुछ याद आ रही है?

यह तथ्य यह है कि a एक double है साथ क्या करना है कर सका: धन्यवाद आप

उत्तर

24

यह 4 है क्योंकि लंबे और डबल फ्रेम में लगातार 2 प्रविष्टियां हैं। यह स्पष्ट रूप से Java JVM specification द्वारा निर्दिष्ट किया जाता:

प्रकार का मान लंबे या प्रकार पर दो लगातार दो स्थानीय चर पर है। इस तरह का मान केवल कम सूचकांक का उपयोग करके संबोधित किया जा सकता है। उदाहरण के लिए, इंडेक्स n पर स्थानीय चर सरणी में को दो बार संग्रहीत प्रकार का मान इंडेक्स एन और एन +1 के साथ स्थानीय चर पर कब्जा करता है; हालांकि, इंडेक्स एन +1 पर स्थानीय चर से लोड नहीं हो सकता है। इसे संग्रहीत किया जा सकता है। हालांकि, ऐसा करने से स्थानीय चर n की सामग्री को अमान्य कर दिया जाता है।

4

मैं जावा बाईटकोड पता नहीं है, यह सिर्फ एक अनुमान है? क्या इसके लिए दो शब्द आरक्षित हैं?

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