對于熟悉Java編程的開發人員而言,JVM指令和Java字節碼往往是比較關鍵的概念。Java程序可以編譯成Java字節碼,這是一種中間格式,之后由JVM解釋執行,最終實現程序的運行。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
上述代碼被編譯成了如下的字節碼:
0: iconst_0 1: istore_1 2: iload_1 3: iiconst_5 4: if_icmpge 27 7: getstatic #2; //Field java/lang/System.out:Ljava.io.PrintStream; 10: ldc #3; //String Hello, World! 12: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 15: iinc 1, 1 18: goto 2 21: astore_2 22: aload_2 23: invokevirtual #5; //Method java/lang/Exception.printStackTrace:()V 26: return 27: return
可以看到,Java字節碼是一種棧式指令集,也就是說,這些指令基于操作數棧進行操作。例如,在代碼的第7行,我們調用了靜態方法System.out,這個方法會將PrintStream對象推入到棧中。接著,在第10行,我們將字符串Hello, World!推入到棧中。最后,在第12行,我們調用了println方法,這個方法會彈出兩個元素(PrintStream對象和字符串),之后將字符串輸出到控制臺。
雖然Java字節碼通常是由Java源代碼編譯而來,但是我們也可以手動編寫Java字節碼,然后由JVM解釋執行。因此,了解Java字節碼和JVM指令是成為高級Java開發人員的關鍵一步。
下一篇php 事務鎖定