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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

第44节:Java当中的JVM

發(fā)布時間:2025/7/14 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第44节:Java当中的JVM 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java當(dāng)中JVM

01

在使用控制面板時的實質(zhì):

Hello.java使用javac,然后變成為Hello.class通過運行java這個命令,在類加載器中(含有加載,驗證,準(zhǔn)備,解析,初始化,使用,卸載),到j(luò)vm為Java虛擬機中運行,在jvm中有方法區(qū),堆內(nèi)存,線程棧,本地方法棧,PC計數(shù)器。

類加載器:

  • 加載,
  • 驗證,class文件的版本是否能兼容當(dāng)前的Java虛擬機版本,然后class文件要滿足虛擬機的規(guī)范。
  • 準(zhǔn)備,需要準(zhǔn)備什么呢?就是要進(jìn)行類成員的初始化為初始值,其中為final修飾的類變量除外,final變量就直接初始化為變量值,而類成員不一樣。
  • 解析,什么是解析呢?就是把符號引用解析為直接引用,就是我們變量xxx,這種代表變?yōu)橹苯右?#xff0c;什么是直接引用呢?就是內(nèi)存地址,如我們常見的xxx0203r0e,這種。
  • 初始化,把關(guān)于static修飾的變量或者是static靜態(tài)代碼塊按照順序組成構(gòu)造器進(jìn)行初始化變量。
  • 使用,
  • 卸載
  • JVM

    JVM: 方法區(qū)(保存所有類的信息,通過常量池來保存生成所有類信息的對象),堆內(nèi)存,線程棧,本地方法棧,計數(shù)器。

    // 在控制面板中,反編譯 javap -c xxx 就是將字節(jié)碼反編譯為字節(jié)碼的指令輸出 public class Hello{public Hello();Code:0: aload_01: invokespecial #14: returnpublic static void main(java.lang.String[]);... }

    把程序放進(jìn)jvm中運行,到線程棧中運行,主方法main(主線程),在線程棧中運行如果有遇到new對象關(guān)鍵字時,main這個主線程就會在自己的內(nèi)存中(線程棧)聲明一個的對象(對象的引用指向堆內(nèi)存中開辟的對象),Hello hello;在jvm中有個堆內(nèi)存,就會申請一片空間內(nèi)存地址,即創(chuàng)建一個對象,實例變量,實例方法從方法區(qū)中指向堆內(nèi)存。

    public class Hello{public static void main(String[] args){Hello hello = new Hello();// 對象的聲明 和 創(chuàng)建對象} }

    類加載到虛擬機中:

    public class Demostatic {System.out.println("靜態(tài)代碼塊");}{System.out.println("普通代碼塊");}public Demo(){System.out.println("構(gòu)造方法");}public static void main(String[] args){new Demo();} } // 結(jié)果 靜態(tài)代碼塊 普通代碼塊 構(gòu)造方法// 加載 驗證 準(zhǔn)備 解析 初始化 使用 卸載 Demo.java -> Demo.class -> 加載進(jìn)入虛擬機中,類加載器 (驗證類信息,元素信息,版本,字節(jié)碼,準(zhǔn)備,初始化類變量,解析把符號引用解析為直接引用,進(jìn)行初始化就是把static變量和static靜態(tài)代碼塊進(jìn)行初始化變量)

    步驟:

    在堆內(nèi)存中執(zhí)行的順序就是加載實例信息,然后在進(jìn)行構(gòu)造方法。

    02

    了解static案例

    // 父類 public class Fstatic {System.out.println("F靜態(tài)代碼塊");}{System.out.println("F普通代碼塊");}public F(){System.out.println("F構(gòu)造方法");} } // 子類 public class S extends Fstatic {System.out.println("S靜態(tài)代碼塊");}{System.out.println("S普通代碼塊");}public S(){super(); // 默認(rèn)的System.out.println("S構(gòu)造方法");} } // 測試 public class Demopublic static void main(String[] args){// 創(chuàng)建子類對象new S();} } // 結(jié)果 F靜態(tài)代碼塊 S靜態(tài)代碼塊 F普通代碼塊 F構(gòu)造方法 S普通代碼塊 S構(gòu)造方法

    程序進(jìn)入JVM中的方法區(qū),子類繼承父類,父類進(jìn)行加載實例信息進(jìn)入到開辟的內(nèi)存中,然后執(zhí)行完再執(zhí)行構(gòu)造方法,在堆內(nèi)存中new一個對象,new S(); 在子類的構(gòu)造方法中會有默認(rèn)的super(),加載父類,如果子類調(diào)用默認(rèn)調(diào)用super(),而父類沒有無參的構(gòu)造方法,而是有參的構(gòu)造方法,那么就要自己添加,在super(xxx)中。

    往后余生,唯獨有你
    簡書作者:達(dá)叔小生
    90后帥氣小伙,良好的開發(fā)習(xí)慣;獨立思考的能力;主動并且善于溝通
    簡書博客: https://www.jianshu.com/u/c785ece603d1

    結(jié)語

    • 下面我將繼續(xù)對 其他知識 深入講解 ,有興趣可以繼續(xù)關(guān)注
    • 小禮物走一走 or 點贊

    轉(zhuǎn)載于:https://www.cnblogs.com/dashucoding/p/9665790.html

    總結(jié)

    以上是生活随笔為你收集整理的第44节:Java当中的JVM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。