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

歡迎訪問 生活随笔!

生活随笔

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

java

java虚拟机1.7_《Java虚拟机原理》7.1 精选 —— 总览

發布時間:2025/3/12 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java虚拟机1.7_《Java虚拟机原理》7.1 精选 —— 总览 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.一個程序在 JVM 中運行的完整流程

java程序執行流程.JPG

說明:

① 類加載器把字節碼加載到方法區

② 方法區的字節碼被 JVM new,在堆內存中生成字節碼對象

③ 字節碼對象被 GC 的要求有:該類沒有在其他任何地方被引用;該類的所有的實例對象都已被 GC;該類的類加載器的實例已被 GC

2.Java 虛擬機的生命周期

JVM 的生命周期可以分為啟動、運行、退出。

(1) 啟動

JVM 的啟動過程是類加載,通過類加載器把二進制字節碼加載到 JVM。

類加載器采用雙親委派模型, 其類型有 3 種:

① Bootstrap ClassLoader 啟動類加載器:負責加載系統類和 /lib 目錄的 jar 和類,例如 String

② ExtClassLoader 擴展類加載器:負責加載 /lib/ext 目錄下的 jar 和類

③ AppClassLoader 應用程序類加載器:負責加載當前應用 ClassPath 的 jar 和類

④ UserDefinedClassLoader 用戶自定義加載器:負責加載用戶自定義的 jar 和類

示例如下,執行 main 方法,需要加載 Test01。根據雙親委派模型即向上檢查、向下加載,JVM 從 AppClassLoader、ExtClassLoader 到 Bootstrap ClassLoader 檢查和加載 Test01。Test01 是用戶自定義類,Test01 沒有指定父類即默認父類是 Object 類,被

AppClassLoader 加載。

public class Test01 {

public static void main(String[] args) {

System.out.println("123");

}

}

類的生命周期:

① 加載:通過全類名獲取該類的二進制字節流、將字節流所代表的靜態存儲結構轉換為方法區的運行時數據結構、在內存中生成一個代表該類的 Class 對象(方法區數據的訪問入口);

② 驗證:驗證文件格式、字節碼驗證、魔數驗證

③ 準備:分配內存給類變量,并設置類變量初始值。如果是基本數據類型,就會給他們設置默認值;

④ 解析:將常量池內的符號引用替換為直接引用

⑤ 初始化:new 指令、getstatic 指令、putstatic 指令、invokestatic 指令、 java.lang.reflect 的反射等

⑥ 使用:用戶程序使用

⑦ 卸載:該類的所有的實例對象都已被GC、該類沒有在其他任何地方被引用、該類的類加載器的實例已被GC

(2) 運行

一個JVM 進程的運行,實際上是 Java 程序的運行。當程序運行結束后,JVM 進程也就結束。

JVM 的守護線程:

Java 有 2 種進程,User Thread 用戶線程、Daemon Thread 守護線程。例如,用戶線程是指用戶自定義的 main 函數,而守護線程是服務于用戶線程的,例如 GC 垃圾回收線程。兩種線程的生命周期是一致的,前者優先級高于后者的。

(3)退出

JVM 的退出有多種場景,如下所示。

① 程序正常結束運行

② 程序中調用 System.exit() 等方法

③ 程序運行過程中,遇到異常錯誤終止

④ 操作系統、硬件原因導致 JVM 進程被結束

總結

以上是生活随笔為你收集整理的java虚拟机1.7_《Java虚拟机原理》7.1 精选 —— 总览的全部內容,希望文章能夠幫你解決所遇到的問題。

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