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

歡迎訪問 生活随笔!

生活随笔

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

java

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

發布時間:2023/12/3 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 讲解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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