1、Java進階語言
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxCMy8VZ6l2cs0TVtpFc4VVUuVzVhtWOyEVQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5MTM1UjMxEjMzATOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、JVM:跨語言的平台
- 作為一個平台,Java虛拟機扮演着舉足輕重的作用。Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分
- 作為燈種文化,Java幾乎成為了“開源”的代名詞。第三方開源軟體和架構。如Tomcat、Struts,MyBatis,Spring等。 就連JDK和JVM自身也有不少開源的實作,如openJDK、Harmony。
每個語言都需要轉換成位元組碼檔案,最後轉換的位元組碼檔案都能通過Java虛拟機進行運作和處理
- 基本實作在Java虛拟機平台上運作非Java語言編寫的程式。
- Java虛拟機根本不關心運作在其内部的程式到底是使用何種程式設計語言編寫的,它隻關心“位元組碼”檔案。也就是說Java虛拟機擁有語言無關性,并不會單純地與Java語言“終身綁定”
3、多語言混合程式設計
- Java平台上的多語言混合程式設計正成為主流,通過特定領域的語言去解決特定領域的問題是目前軟體開發應對日趨複雜的項目需求的一個方向。
- 試想一下,在一個項目之中,并行處理用Clojure語言編寫,展示層使用JRuby/Rails,中間層則是Java,每個應用層都将使用不同的程式設計語言來完成,而且,接口對每一層的開發者都是透明的,各種語言之間的互動不存在任何困難,就像使用自己語言的原生API一樣友善,因為它們最終都運作在一個虛拟機之上。
- 對這些運作于Java虛拟機之上、Java之外的語言,來自系統級的、底層的支援正在迅速增強,以JSR-292為核心的一系列項目和功能改進(如Da Vinci Machine項目、Nashorn引擎、InvokeDynamic指令、java.lang.invoke包等),推動Java虛拟機從“Java語言的虛拟機”向 “多語言虛拟機”的方向發展。
4、JVM作用
- Java虛拟機就是二進制位元組碼的運作環境,負責裝載位元組碼到其内部,解釋/編譯為對應平台上的機器指令執行。每一條Java指令,Java虛拟機規範中都有詳細定義,如怎麼取操作數,怎麼處理操作數,處理結果放在哪裡。
5、JVM特點
- 一次編譯,到處運作
- 自動記憶體管理
- 自動垃圾回收功能
6、JVM的位置
7、JVM的整體結構
1.8、Java代碼執行流程
JVM(二): JVM與Java體系結構1、Java進階語言2、JVM:跨語言的平台3、多語言混合程式設計4、JVM作用5、JVM特點6、JVM的位置7、JVM的整體結構1.8、Java代碼執行流程1.9. JVM的生命周期
1.9. JVM的生命周期
虛拟機的啟動
Java虛拟機的啟動是通過引導類加載器(bootstrap class loader)建立一個初始類(initial class)來完成的,這個類是由虛拟機的具體實作指定的
虛拟機的執行
- 一個運作中的Java虛拟機有着一個清晰的任務:執行Java程式。
- 程式開始執行時他才運作,程式結束時他就停止。
- 執行一個所謂的Java程式的時候,真真正正在執行的是一個叫做Java虛拟機的程序。
虛拟機的退出
有如下的幾種情況:
- 程式正常執行結束
- 程式在執行過程中遇到了異常或錯誤而異常終止
- 由于作業系統用現錯誤而導緻Java虛拟機程序終止
- 某線程調用Runtime類或system類的exit方法,或Runtime類的halt方法,并且Java安全管理器也允許這次exit或halt操作。
- 除此之外,JNI(Java Native Interface)規範描述了用JNI Invocation API來加載或解除安裝 Java虛拟機時,Java虛拟機的退出情況。
筆記來源:尚矽谷JVM全套教程,百萬播放,全網巅峰(宋紅康詳解java虛拟機)
參考:https://www.yuque.com/u21195183/jvm/zq4x30