jvm虛擬機棧,也叫java棧,它由一個個的棧幀組成,而棧帖由如下幾個部分組成java
package com.lind.basic; public class Demo1 { static int hello() { int a = 1; int b = 2; int c = a + b; return c; } public static void main(String[] args) { System.out.println(hello()); } }
javac demo1.java
生成以後,擴展名是.class,這個文件對於咱們來講是沒有可讀性的。jvm
javap demo1.class > demo1.txt
咱們能夠經過文件編譯工具來查看demo1.txt的內容工具
Compiled from "Demo1.java" public class com.lind.basic.Demo1 { public com.lind.basic.Demo1(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return static int hello(); Code: 0: iconst_1 // 把第一個整型變量推到操做數棧 1: istore_0 // 讓它出棧,並存儲到局部變量表 2: iconst_2 3: istore_1 4: iload_0 // 加載第一個數據入操做數棧 5: iload_1 // 加載第二個數據入操做數棧 6: iadd // 將兩個數相加,結束入操做數棧 7: istore_2 // 將結果出棧,存到局部變量表 8: iload_2 // 加載它入操做數棧 9: ireturn // 返回 public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: invokestatic #3 // Method hello:()I 6: invokevirtual #4 // Method java/io/PrintStream.println:(I)V 9: return }
對於上面的彙編文件,咱們是能夠看的懂的,並且咱們須要,彙編語言能夠直接在計算機上運行,我想jvm應該也是把class文件生成對應操做系統的彙編文件,而後交給操做系統去執行吧!操作系統