JVM 学习一:JVM 的构架模型及生命周期
生活随笔
收集整理的這篇文章主要介紹了
JVM 学习一:JVM 的构架模型及生命周期
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
JVM 的架構(gòu)模型
Java 編譯器輸入的指令流基本上是一種基于棧的指令集架構(gòu),另外一種指令集架構(gòu)則是基于寄存器的指令集架構(gòu)。
具體來說,這兩種架構(gòu)之間的區(qū)別:
- 基于棧式架構(gòu)的特點:
- 設(shè)計和實現(xiàn)更簡單,適用于資源受限的系統(tǒng)
- 避開了寄存器的分配難題:使用零地址指令方式分配
- 指令流中的指令大部分是零地址指令,其執(zhí)行過程依賴于操作棧。指令集更小,編譯器實現(xiàn)更容易
- 不需要硬件支持,可移植性更好,更好實現(xiàn)跨平臺
- 基于寄存器架構(gòu)的特點:
- 典型的應(yīng)用是 X86 的二進制指令集:比如傳統(tǒng)的 PC 以及 Android 的 Davlik 虛擬機
- 指令集架構(gòu)則完全依賴硬件,可移植性差
- 性能優(yōu)秀和執(zhí)行更高效
- 花費更少的指令去完成一項操作
- 在大部分情況下,基于寄存器架構(gòu)的指令集往往都以一地址指令、二地址指令、三地址指令為主,而基于棧式架構(gòu)的指令集卻是以零地址指令為主
由于跨平臺的設(shè)計,Java 的指令都是根據(jù)棧來設(shè)計的。不同平臺的 CPU 架構(gòu)不同,所以不能設(shè)計為基于寄存器的。優(yōu)點是跨平臺,指令集小,編譯器容易實現(xiàn),缺點是性能下降,實現(xiàn)同樣的功能需要更多的指令。
JVM 的生命周期
虛擬機的啟動
Java 虛擬機的啟動是通過引導(dǎo)類加載器(bootstrap class loader)創(chuàng)建一個初始類(initial class)來完成的,這個類是由虛擬機的具體實現(xiàn)指定的。
虛擬機的執(zhí)行
- 一個運行中的 Java 虛擬機有著一個清晰的任務(wù):執(zhí)行 Java 程序
- 程序開始執(zhí)行時它才運行,程序結(jié)束的時候它就停止
- 執(zhí)行一個所謂的 Java 程序的時候,真正在執(zhí)行的是一個叫做 Java 虛擬機的進程
虛擬機的退出
虛擬機的退出有如下幾種情況:
- 程序正常執(zhí)行結(jié)束
- 程序在執(zhí)行過程中遇到了異常或錯誤而異常終止
- 由于操作系統(tǒng)出現(xiàn)錯誤而導(dǎo)致 Java 虛擬機進程終止
- 某線程調(diào)用 Runtime 類或 System 類的 exit 方法,或 Runtime 類的 halt 方法,并且 Java 安全管理器也允許這次 exit 或 halt 操作
- 除此之外,JNI(Java Native Interface)規(guī)范描述了用 JNI Invocation API 來加載或卸載 Java 虛擬機時,Java 虛擬機的退出情況
總結(jié)
以上是生活随笔為你收集整理的JVM 学习一:JVM 的构架模型及生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone的mysql客户端_适用于i
- 下一篇: 页面升紧急级访问_部落冲突10-13本