日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

發布時間:2023/12/3 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Student s = new Student(); s.play(); Student s2 = new Student();

以上代碼的執行流程如下:

JVM 作為操作系統的一個迚程在系統中執行,那么系統會為 JVM 分配一塊內存空間,這塊內存空 間被 JVM 分為 3 大塊(棧區、堆區、方法區)

一般而言,對象在堆(Heap)中創建,但是一些特殊的對象會在方法區中創建。

第一步
當 JVM 執行第一行代碼“Student s = new Student();”時
JVM 先碰到了 Student 類,“Student s = new Student();”
此時,JVM 將查看方法區中是否有 Student 對應的 Class 對象(我們學習過反射,都知道 Class
對象,在同一個 JVM 中,可以有很多的 Student 實例,但是 Student 的 Class 對象只有一個)。

因為是第一次執行,方法區中沒有 Student 的 Class 對象,此時 JVM 就會調用類加載器 (ClassLoader)

類加載器有 2 大類:
第 1 種是虛擬機本身提供的,第 2 種是程序員自定義的(像 Tomcat 本身也有自己的類加載器)

類加載器(ClassLoader)要加載 Student 類的過程,就是要在物理位置找到 Student 類的字節碼文件(如 D:/workspace/web03/classes/Student.class)。
怎么才能找到? JVM 會根據 ClassPath 搜索。

當 JVM 找到 Student 類的字節碼文件后,JVM 會將該字節碼文件轉換為一個 Student 的 Class 對 象,放入方法區

當這個 Student 的 Class 對象構造完畢,類加載過程就完成了。

第二步

將 Sutdent 類型的變量 s 放入棧(Stack)中; “Student s = new Student();”

第三步

“Student s = new Student();” 在堆(heap)中創建一個 Student 對象,變量 s 指向該對象。

第四步

play()方法放在代碼區中 Student 的 Class 對象中,對象的方法在 JVM 中只有 1 份,對象的屬性(每
個對象都有獨有的屬性)可以有多份。

執行“s.play();”方法時,Student 對象到方法區中找到 play()方法并執行。

第五步

執行“Student s2 = new Student();”時,JVM 到方法區中找到了 Student 的 Class 對象,所以 JVM 不再調用 ClassLoader 加載 Class 對象。
將直接在堆中創建。

總結

以上是生活随笔為你收集整理的Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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