java jvm是什么,讓我們一起了解一下?
jvm是java上的一個(gè)虛構(gòu)出來的計(jì)算機(jī),是一個(gè)位于Java與操作系統(tǒng)之間的中間態(tài)。有自己完善的硬件結(jié)構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。
JVM的作用是什么?
Java程序的跨平臺(tái)特性主要就是因?yàn)镴VM實(shí)現(xiàn)的。在編譯java程序時(shí)會(huì)將寫好的源程序通過編譯器編譯生成.class文件(又稱為字節(jié)碼文件),之后就是通過JVM內(nèi)部的解釋器將字節(jié)碼文件解釋成為具體平臺(tái)上的機(jī)器指令執(zhí)行,所以就可以實(shí)現(xiàn)java程序的跨平臺(tái)特性。
JVM內(nèi)部體系結(jié)構(gòu)大致分為三部分:類裝載器(ClassLoader)子系統(tǒng),運(yùn)行時(shí)數(shù)據(jù)區(qū)和執(zhí)行引擎。
那java程序運(yùn)行與JVM的關(guān)系是怎樣的?
1、java源文件編譯生成.class文件(字節(jié)碼)
2、字節(jié)碼由JVM解釋運(yùn)行。
因?yàn)閖ava程序既要編譯同時(shí)也要經(jīng)過JVM的解釋運(yùn)行,所以java被稱為半解釋語言。
jvm在java應(yīng)用中的具體案例分析如下:
public?class?TestClassLoader?{ ????public?static?void?main(String[]?args)?{ ????????Person?person_01?=?new?Person(); ????????Person?person_02?=?new?Person(); ????????Person?person_03?=?new?Person(); ????????//發(fā)現(xiàn)person_01,person_02,person_03的hashCode一致,代表這三個(gè)實(shí)例化對(duì)象隸屬于一個(gè)Class,即Person ????????System.out.println(person_01.hashCode()); ????????System.out.println(person_02.hashCode()); ????????System.out.println(person_03.hashCode()); ????????//Person實(shí)例化對(duì)象person_01通過getClass()方法得到Class對(duì)象Person ????????Class?Person?=?person_01.getClass(); ????????//Person通過getClassLoader()方法得到系統(tǒng)類加載器 ????????ClassLoader?myClassLoader?=?Person.getClassLoader(); ????????System.out.println(myClassLoader.hashCode()); ????????//加載器對(duì)象myClassLoader通過getParent()方法得到拓展類加載器 ????????ClassLoader?myParentClassLoader?=?myClassLoader.getParent(); ????????System.out.println(myParentClassLoader.hashCode()); ????????//加載器對(duì)象myGPClassLoader通過getParent()方法得到引導(dǎo)類加載器 ????????ClassLoader?myGPClassLoader?=?myParentClassLoader.getParent(); ????????System.out.println(myGPClassLoader.hashCode());?//發(fā)現(xiàn)報(bào)錯(cuò),無法通過方法獲取引導(dǎo)類加載器 ????} } class?Person{}
以上就是小編今天的分享了,希望可以幫助到大家。