日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JVM与Java的体系结构(JVM入门知识体系总结)

發布時間:2024/10/14 java 136 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM与Java的体系结构(JVM入门知识体系总结) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面:博主是一位普普通通的19屆雙非軟工在讀生,平時最大的愛好就是聽聽歌,逛逛B站。博主很喜歡的一句話花開堪折直須折,莫待無花空折枝:博主的理解是頭一次為人,就應該做自己想做的事,做自己不后悔的事,做自己以后不會留有遺憾的事,做自己覺得有意義的事,不浪費這大好的青春年華。博主寫博客目的是記錄所學到的知識并方便自己復習,在記錄知識的同時獲得部分瀏覽量,得到更多人的認可,滿足小小的成就感,同時在寫博客的途中結交更多志同道合的朋友,讓自己在技術的路上并不孤單。

目錄:
1.Java和JVM簡介
???? ?? Java的跨平臺性
???? ?? JVM跨語言的平臺
???? ?? JVM的位置、作用特點
2.Java代碼執行流程
3.棧的指令集架構和寄存器的指令集架構
4.JVM的生命周期

1.Java和JVM簡介

1.1Java的跨平臺性

我們都知道java是可以跨平臺的,其實我們字節碼文件本身就可以跨平臺的,不同操作系統有不同版本的JVM,但是對字節碼文件的識別都是一樣的

1.2JVM跨語言的平臺

其實我們Java虛擬機不是說只能解釋Java的字節碼文件,還能解釋其他語言的字節碼文件,只不過需要我們在編譯其他的語言的時候,編譯器遵循JVM的規范,那么JVM就可以對其進行解釋也就是說Java虛擬機不關心運行在其內部的程序是何種語言編寫的而只是關心字節碼文件

1.3JVM的位置、作用特點

1.JVM的位置

2.JVM的作用和特點

2.Java代碼的執行流程

Java源代碼---->編譯器(前端編譯器)---->jvm可執行的Java字節碼(即虛擬指令)---->jvm---->jvm中解釋器----->機器可執行的二進制機器碼---->程序運行。
字節碼文件:Java源代碼經過虛擬機編譯器編譯后產生的文件(即擴展為.class的文件),它不面向任何特定的處理器,只面向虛擬機。

我們看上圖可以發現一個java源代碼變成機器指令有兩個編譯的過程

  • 前端編譯:把java源碼編譯成字節碼文件
  • 后端編譯:就是JIT編譯器,把字節碼指令編譯成機器指令
  • 3.JVM的指令架構

    Java編譯器輸入的指令流基本上是一種基于棧的指令集架構,另外一種指令集架構則
    基于寄存器的指令集架構。

    基于棧式架構的特點:

    • 設計和實現更簡單,適用于資源受限的系統;
    • 避開了寄存器的分配難題:使用零地址指令方式分配。 即是一個棧的操作,我們只需要關心棧頂
    • 指令流中的指令大部分是零地址指令,其執行過程依賴于操作棧。指令集更小, [但相比于寄存器操作更多,一會兒會有解釋]編譯器容易實現
    • 不需要硬件支持,可移植性更好,更好實現跨平臺。棧是一個內存層面,不跟硬件打交道

    基于寄存器架構的特點:

    • 典型的應用是x86的二進制指令集:比如傳統的PC以及Android的Davlik虛 擬機。
    • 指令集架構則完全依賴硬件,可移植性差
    • 性能優秀和執行更高效: 因為基于cpu,比較快,對硬件耦合度較高
    • 花費更少的指令去完成一項操作。
    • 在大部分情況下,基于寄存器架構的指令集往往都以一地址指令、二地址指令 和三地址指令為主,而基于棧式架構的指令集卻是以零地址指令為主。

    舉個例子:我們同樣進行2+3的操作,基于棧和寄存器的計算流程如下:

    上邊是基于棧,下邊是基于寄存器的

    我們可以發現完成一個指令,棧的指令集小,但指令多,寄存器指令集大,指令少

    總結:

    由于跨平臺性的設計,Java的指令都是根據棧來設計的。不同平臺CPU架構不同,所以不能設計為基于寄存器的。優點是跨平臺, 指令集小,編譯器容易實現,缺點是性能下降,實現同樣的功能需要更多的指令。

    4.JVM的生命周期

    4.1JVM的啟動

    通過引導類加載器(bootstrap class loader)創建一個初始類(initial class)來完成的,這個類是由虛擬機的具體實現指定的.

    4.2JVM的執行
    • 一個運行中的java虛擬機有著一個清晰的任務:執行Java程序;
    • 程序開始執行的時候他才運行,程序結束時他就停止;
    • 執行一個所謂的Java程序的時候,真真正正在執行的是一個叫做Java虛擬機的進程。
    4.3JVM的退出
    • 程序正常執行結束
    • 程序異常或錯誤而異常終止
    • 操作系統錯誤導致終止
    • 某線程調用Runtime類或System類的exit方法,或Runtime類的halt方法,并且java安全管理器也允許這次exit或halt操作
    • 除此之外,JNI規范描述了用JNI Invocation API來加載或卸載Java虛擬機時,Java虛擬機的退出情況

    總結

    以上是生活随笔為你收集整理的JVM与Java的体系结构(JVM入门知识体系总结)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。