मुझे बताया गया है कि volatile
कीवर्ड चर के संचालन को लिखने से पहले स्मृति बाधा जोड़ सकता है।जावा में अस्थिर चर को कैसे डिमंपाइल करें?
public class Test {
private Object o;
public Test() {
this.o = new Object();
}
private volatile static Test t;
public static void createInstance() {
t = new Test(); // volatile would insert memory barrier here.
}
public static void main(String[] args) throws Exception {
Test.createInstance();
}
}
और फिर यह विघटित:
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: aload_0
5: new #2; //class java/lang/Object
8: dup
9: invokespecial #1; //Method java/lang/Object."<init>":()V
12: putfield #3; //Field o:Ljava/lang/Object;
15: return
public static void createInstance();
Code:
0: new #4; //class Test
3: dup
4: invokespecial #5; //Method "<init>":()V
7: putstatic #6; //Field t:LTest;
10: return
public static void main(java.lang.String[]) throws java.lang.Exception;
Code:
0: invokestatic #7; //Method createInstance:()V
3: return
}
मैं स्मृति बाधा से संबंधित कुछ भी नहीं देख सकते हैं, और फिर मैं volatile
निकालकर उसे दोबारा डिकंपाइल, बाइट कोड तो मैं कोड लिखने बिल्कुल नहीं बदलता है।
मुझे बाइट कोड में कुछ भी कैसे मिल सकता है?
धन्यवाद, @ मार्को, हालांकि स्मृति अवरोध जेआईटी द्वारा उत्पादित किया गया है, मुझे लगता है कि बाइट कोड में कुछ वाक्यविन्यास होना चाहिए ताकि यह संकेत दिया जा सके कि वेरिएबल अस्थिर है, है ना? बाइट कोड गैर-अस्थिर के समान ही है, JVM कैसे पता चलेगा कि अस्थिर है? : डी – MrROY
यह चरम पर एक झंडा है, न कि उस कोड पर जो इसे एक्सेस करता है। –
क्या कोई डिकंपाइल उपकरण मुझे अस्थिर चर का विवरण दिखा सकता है? – MrROY