एक चर सिर्फ ढेर पर एक स्थान है। अपने वैरिएबल को जितना संभव हो उतना छोटा स्कोप रखें और उन्हें अंतिम बनाने की कोशिश करें। हालांकि स्कोप और फाइनल सिर्फ कोड कोड चीजें हैं ... एक कोड पीढ़ी/वीएम बिंदु से वे वास्तव में कोई फर्क नहीं पड़ता।
आपके विशिष्ट उदाहरण में, "int" का उपयोग करके कोई कचरा नहीं बनाया जाता है। हालांकि अगर यह वस्तुओं को बनाया जा रहा था तो दोनों मामलों के लिए कचरे की मात्रा और जब कचरा सफाई के लिए पात्र होगा, तो समान होगा।
public class X extends java.lang.Object{
public X();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: invokestatic #2; //Method foo:()V
3: invokestatic #3; //Method bar:()V
6: return
private static void foo();
Code:
0: iconst_0
1: istore_0
2: iload_0
3: iconst_5
4: if_icmpge 15
7: iload_0
8: istore_1
9: iinc 0, 1
12: goto 2
15: return
private static void bar();
Code:
0: iconst_0
1: istore_0
2: iload_0
3: iconst_5
4: if_icmpge 15
7: iload_0
8: istore_1
9: iinc 0, 1
12: goto 2
15: return
}
किसी अन्य विधि घोषणा करता है कि पाश बाहर चर आप की वजह से थोड़ा अलग बाईटकोड देना जोड़ना:
public class X
{
public static void main(final String[] argv)
{
foo();
bar();
}
private static void foo()
{
for(int i=0;i<5;i++)
{
final int myFinalVariable = i;
}
}
private static void bar()
{
for(int i=0;i<5;i++)
{
int myFinalVariable = i;
}
}
}
संकलक प्रत्येक विधि के लिए समान बाईटकोड पैदा करता है:
निम्नलिखित कोड ले लो ऑर्डर करें कि चर घोषित किए गए हैं)। ध्यान दें कि इस संस्करण को चर अंतिम नहीं बनाया जा सकता है। इस अंतिम संस्करण का सबसे अच्छा तरीका नहीं है (पाश अंदर अंतिम चर सबसे अच्छा है अगर आप यह कर सकते):
private static void car()
{
int myFinalVariable;
for(int i=0;i<5;i++)
{
myFinalVariable = i;
}
}
private static void car();
Code:
0: iconst_0
1: istore_1
2: iload_1
3: iconst_5
4: if_icmpge 15
7: iload_1
8: istore_0
9: iinc 1, 1
12: goto 2
15: return
}