標籤:java 虛擬機器 虛擬機器棧
Java的函數調用棧就是Java虛擬機器棧,它是線程私人的,與線程一同被建立,用於儲存棧幀。
棧幀隨著方法的調用而建立,隨著方法的結束而銷毀。可以說棧幀是方法的抽象。
於是,可以通過列印出Java虛擬機器棧中的棧幀資訊來瞭解函數調用過程。用於實現這個過程的Java代碼如下:
package methodcall;public class Methods {public void method1() {method2();}public void method2() {method3();}public void method3() {Throwable ex = new Throwable();/** * Throwable的getStackTrace()可以返回當前線程的虛擬機器棧資訊,返回 * 數組的第一個元素是棧頂元素,最後一個元素是棧底元素。 */StackTraceElement[] stackElements = ex.getStackTrace();System.out.println(stackElements.length);for (StackTraceElement stackTraceElement : stackElements) {System.out.println(stackTraceElement.getMethodName());}}}
package methodcall;public class MethodCall {public static void main(String[] args) {// TODO Auto-generated method stubMethods methods = new Methods();methods.method1();}}
輸出結果如下:
4
method3
method2
method1
main
參考文獻:
《Java虛擬機器規範 Java SE 7》
Java函數調用棧