Tips
做一個終身學(xué)習(xí)的人。
在本章中,主要介紹以下內(nèi)容:
什么是虛擬機(jī)棧(JVM Stack)和棧幀(Stack Frame)
如何在JDK 9之前遍歷一個線程的棧
在JDK 9中如何使用StackWalker API遍歷線程的棧
在JDK 9中如何獲取調(diào)用者的類
一. 什么是虛擬機(jī)棧
JVM中的每個線程都有一個私有的JVM棧,它在創(chuàng)建線程的同時創(chuàng)建。 該棧是先進(jìn)先出(LIFO)數(shù)據(jù)結(jié)構(gòu)。 棧保存棧幀。 每次調(diào)用一個方法時,都會創(chuàng)建一個新的棧幀并將其推送到棧的頂部。 當(dāng)方法調(diào)用完成時,棧幀銷毀(從棧中彈出)。 堆棧中的每個棧幀都包含自己的局部變量數(shù)組,以及它自己的操作數(shù)棧,返回值和對當(dāng)前方法類的運(yùn)行時常量池的引用。 JVM的具體實(shí)現(xiàn)可以擴(kuò)展一個棧幀來保存更多的信息。