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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

第44节:Java当中的JVM

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

Java當(dāng)中JVM

01

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

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

類加載器:

  • 加載,
  • 驗(yàn)證,class文件的版本是否能兼容當(dāng)前的Java虛擬機(jī)版本,然后class文件要滿足虛擬機(jī)的規(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)存,線程棧,本地方法棧,計(jì)數(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中運(yùn)行,到線程棧中運(yùn)行,主方法main(主線程),在線程棧中運(yùn)行如果有遇到new對象關(guān)鍵字時,main這個主線程就會在自己的內(nèi)存中(線程棧)聲明一個的對象(對象的引用指向堆內(nèi)存中開辟的對象),Hello hello;在jvm中有個堆內(nèi)存,就會申請一片空間內(nèi)存地址,即創(chuàng)建一個對象,實(shí)例變量,實(shí)例方法從方法區(qū)中指向堆內(nèi)存。

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

    類加載到虛擬機(jī)中:

    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)造方法// 加載 驗(yàn)證 準(zhǔn)備 解析 初始化 使用 卸載 Demo.java -> Demo.class -> 加載進(jìn)入虛擬機(jī)中,類加載器 (驗(yàn)證類信息,元素信息,版本,字節(jié)碼,準(zhǔn)備,初始化類變量,解析把符號引用解析為直接引用,進(jìn)行初始化就是把static變量和static靜態(tài)代碼塊進(jìn)行初始化變量)

    步驟:

    在堆內(nèi)存中執(zhí)行的順序就是加載實(shí)例信息,然后在進(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)行加載實(shí)例信息進(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ú)有你
    簡書作者:達(dá)叔小生
    90后帥氣小伙,良好的開發(fā)習(xí)慣;獨(dú)立思考的能力;主動并且善于溝通
    簡書博客: https://www.jianshu.com/u/c785ece603d1

    結(jié)語

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

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

    總結(jié)

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

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