成人黄色在线网站 I 国产aa免费 I 中文字幕免费高清 I 国产三级影院 I 日韩欧美三级在线观看 I 久久久国产精品麻豆a片 I 欧美与黑人午夜性猛交久久久 I 91国产精品视频在线 I 国产美女狂喷水潮在线播放 I 黄页免费网站在线观看 I 欧美日韩激情视频 I 午夜理论无码片在线观看免费 I 深夜爽爽动态图无遮无挡 I 国精产品一区一区三区有限公司杨 I 天天操天天舔天天爽 I 免费看日本黄色片 I 成人va在线 I 日韩中文字幕在线观看 I 婷婷综合网 I 97视频免费观察看 I 色月丁香 I 日韩视频一二三 I 男女黄色毛片 I 美女疯狂连续喷潮视频 I 亚洲日本va一区二区sa I 欧美日韩视频区 I 毛片网在线 I 欧美一本在线 I 少妇一级淫片免费放香蕉 I avav在线看 I 久久精品亚洲中文字幕无码网站 I 天堂av在线中文在线新版 I 电影一区 电影二区 I 色av吧 中文字幕 I 国产精品伊人色

歡迎來到培訓無憂網!

全國切換

咨詢熱線 400-001-5729

位置:培訓無憂網 > 新聞資訊 > 電腦/IT > java培訓 >  Java之JVM的相關介紹

Java之JVM的相關介紹

來源:培訓無憂網-云朵 發布人:云朵

2021-11-13 10:53:18|已瀏覽:279次

Java之JVM的相關介紹

    JVM的中文名稱叫Java虛擬機,它是由軟件技術模擬出計算機運行的一個虛擬的計算機。JVM也充當著一個翻譯官的角色,我們編寫出的Java程序,是不能夠被操作系統所直接識別的,這時候JVM的作用就體現出來了,它負責把我們的程序翻譯給系統“聽”,告訴它我們的程序需要做什么操作。我們都知道Java的程序需要經過編譯后,產生.Class文件,JVM才能識別并運行它,JVM針對每個操作系統開發其對應的解釋器,所以只要其操作系統有對應版本的JVM,那么這份Java編譯后的代碼就能夠運行起來,這就是Java能一次編譯,到處運行的原因。

一、JVM的生命周期

    JVM在Java程序開始執行的時候,它才運行,程序結束的時它就停止。一個Java程序會開啟一個JVM進程,如果一臺機器上運行三個程序,那么就會有三個運行中的JVM進程。JVM中的線程分為兩種:守護線程和普通線程守護線程是JVM自己使用的線程,比如垃圾回收(GC)就是一個守護線程。普通線程一般是Java程序的線程,只要JVM中有普通線程在執行,那么JVM就不會停止。權限足夠的話,可以調用exit()方法終止程序。

二、JVM的啟動過程

1、JVM的裝入環境和配置

    在學習這個之前,我們需要了解一件事情,就是JDK和JRE的區別。JDK是面向開發人員使用的SDK,它提供了Java的開發環境和運行環境,JDK中包含了JRE。JRE是Java的運行環境,是面向所有Java程序的使用者,包括開發者。JRE = 運行環境 = JVM。如果安裝了JDK,會發現電腦中有兩套JRE,一套位于/Java/jre.../下,一套位于/Java/jdk.../jre下。那么問題來了,一臺機器上有兩套以上JRE,誰來決定運行那一套呢?這個任務就落到java.exe身上,java.exe的任務就是找到合適的JRE來運行java程序。

java.exe按照以下的順序來選擇JRE:

    自己目錄下有沒有JRE

    父目錄下有沒有JRE

    查詢注冊表: HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\"當前JRE版本號"\JavaHome

這幾步的主要核心是為了找到JVM的絕對路徑。

    jvm.cfg的路徑為:JRE路徑\lib\"CPU架構"\jvm.fig

jvm.cfg的內容大致如下:

    -client KNOWN 
    -server KNOWN 
    -hotspot ALIASED_TO -client 
    -classic WARN 
    -native ERROR 
    -green ERROR 
KNOWN 表示存在 、IGNORE 表示不存在 、ALIASED_TO 表示給別的JVM去一個別名
WARN 表示不存在時找一個替代 、ERROR 表示不存在拋出異常
2、裝載JVM

    通過第一步找到JVM的路徑后,Java.exe通過LoadJavaVM來裝入JVM文件。
LoadLibrary裝載JVM動態連接庫,然后把JVM中的到處函數JNI_CreateJavaVM和JNI_GetDefaultJavaVMIntArgs 掛接到InvocationFunction 變量的CreateJavaVM和GetDafaultJavaVMInitArgs 函數指針變量上。JVM的裝載工作完成。
3、初始化JVM,獲得本地調用接口

    調用InvocationFunction -> CreateJavaVM也就是JVM中JNI_CreateJavaVM方法獲得JNIEnv結構的實例。
4、運行Java程序

    JVM運行Java程序的方式有兩種:jar包 與 Class
    運行jar 的時候,Java.exe調用GetMainClassName函數,該函數先獲得JNIEnv實例然后調用JarFileJNIEnv類中getManifest(),從其返回的Manifest對象中取getAttrebutes("Main-Class")的值,即jar 包中文件:META-INF/MANIFEST.MF指定的的Main-Class的主類名作為運行的主類。之后main函數會調用Java.c中LoadClass方法裝載該主類(使用JNIEnv實例的FindClass)。
    運行Class的時候,main函數直接調用Java.c中的LoadClass方法裝載該類。

5、Class文件

    Class文件由Java編譯器生成,我們創建的.Java文件在經過編譯器后,會變成.Class的文件,這樣才能被JVM所識別并運行。

6、類加載子系統

類加載子系統也可以稱之為類加載器,JVM默認提供三個類加載器:

    BootStrap ClassLoader :稱之為啟動類加載器,是最頂層的類加載器,負責加載JDK中的核心類庫,如 rt.jar、resources.jar、charsets.jar等。

    Extension ClassLoader:稱之為擴展類加載器,負責加載Java的擴展類庫,默認加載$JAVA_HOME中jre/lib/*.jar 或 -Djava.ext.dirs指定目錄下的jar包。

    App ClassLoader:稱之為系統類加載器,負責加載應用程序classpath目錄下所有jar和class文件。

    除了Java默認提供的三個ClassLoader(加載器)之外,我們還可以根據自身需要自定義ClassLoader,自定義ClassLoader必須繼承java.lang.ClassLoader 類。除了BootStrap ClassLoader 之外的另外兩個默認加載器都是繼承自java.lang.ClassLoader 。BootStrap ClassLoader 不是一個普通的Java類,它底層由C++編寫,已嵌入到了JVM的內核當中,當JVM啟動后,BootStrap ClassLoader 也隨之啟動,負責加載完核心類庫后,并構造Extension ClassLoader 和App ClassLoader 類加載器。

    本文由培訓無憂網長沙牛耳教育專屬課程顧問整理發布,希望能夠對想參加長沙Java培訓班的學生有所幫助。更多Java培訓課程資訊歡迎關注培訓無憂網Java培訓頻道或添加老師微信:1503333605010.

      注:尊重原創文章,轉載請注明出處和鏈接 http://m.hebeijilong.cn/news-id-3778.html 違者必究!部分文章來源于網絡由培訓無憂網編輯部人員整理發布,內容真實性請自行核實或聯系我們,了解更多相關資訊請關注java培訓頻道查看更多,了解相關專業課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會一對一幫助你規劃更適合你的專業課程!
  • 姓名:

  • 手機:

  • 地區:

  • 想學什么:

  • 培訓無憂網
免 費 申 請 試 聽
提交申請,《培訓無憂網》課程顧問老師會一對一幫助你規劃更適合你的專業課程!