JVM 大概體系
JVM大概體系(從csdn上找的一幅圖)
從上圖可以看出,JVM由四大塊組成:ClassLoader類加載器,jvm內存區,執行引擎,本地方法棧
1、ClassLoader:類加載器,主要負責查找,加載,解析 .class文件到jvm內存區,以供jvm執行引擎執行加載的字節碼。
2、jvm內存區:主要包括堆,方法區,本地線程棧,native方法棧,PC (程序計數器)。JVM中所有內存相關問題都集中在這塊
- 方法區:主要是存儲classLoader加載的類的信息,方法的信息,常量池中的信息
- 堆: 堆裏面存的都是通過new 關鍵字修飾的對象內存信息,比如new ObjectA,ObjectA運行的內存就在堆中
- 虛擬機棧:java中都是以線程方式執行代碼,線程在執行代碼的時,也需要一部分內存,這部分內存只有執行的線程所擁有。虛擬機棧裏主要是存儲java方法棧裏的信息,比如方法裏的局部變量表,操作數棧,方法出口等信息。
- Native方法棧:jvm中有java編寫的方法,也有底層native方法,native方法棧就是native方法執行時的內存信息。
- PC (程序計數器):記錄當前線程執行 虛擬機字節碼指令的地址,爲給個線程所私有。虛擬機在執行字節碼時,通過改變PC的值來選擇下一條需要執行的字節碼指令。
- 直接內存:直接內存不受JVM管理,使用native函數庫直接分配內存,然後通過DirectByteBuffer對象作爲這塊內存的引用進行操作。
3、jvm執行引擎: .class文件被ClassLoader加載到內存中,變成了JVM可解釋的代碼,這些代碼需要執行才能完成各種業務,這個時候執行這些代碼的模塊就是jvm執行引擎了。主要是把可解釋的代碼,解釋爲操作系統機器碼。
4、natevie interface: 本地接口,主要是不同語言實現的方法,提供給java調用。原本多用於一些專業領域,比如JAVA驅動,地圖製作引擎,現在關於本地方法的調用,已經被類似的Socket通信,WebService調用等方式取代了。
參考資料:
http://blog.csdn.net/mshootingstar/article/details/44783227
《深入理解java 虛擬機》