第44节:Java当中的JVM
Java當(dāng)中JVM
01
在使用控制面板時(shí)的實(shí)質(zhì):
Hello.java使用javac,然后變成為Hello.class通過運(yùn)行java這個(gè)命令,在類加載器中(含有加載,驗(yàn)證,準(zhǔn)備,解析,初始化,使用,卸載),到j(luò)vm為Java虛擬機(jī)中運(yùn)行,在jvm中有方法區(qū),堆內(nèi)存,線程棧,本地方法棧,PC計(jì)數(shù)器。
類加載器:
JVM
JVM: 方法區(qū)(保存所有類的信息,通過常量池來保存生成所有類信息的對(duì)象),堆內(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對(duì)象關(guān)鍵字時(shí),main這個(gè)主線程就會(huì)在自己的內(nèi)存中(線程棧)聲明一個(gè)的對(duì)象(對(duì)象的引用指向堆內(nèi)存中開辟的對(duì)象),Hello hello;在jvm中有個(gè)堆內(nèi)存,就會(huì)申請(qǐng)一片空間內(nèi)存地址,即創(chuàng)建一個(gè)對(duì)象,實(shí)例變量,實(shí)例方法從方法區(qū)中指向堆內(nèi)存。
public class Hello{public static void main(String[] args){Hello hello = new Hello();// 對(duì)象的聲明 和 創(chuàng)建對(duì)象} }類加載到虛擬機(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)備,初始化類變量,解析把符號(hào)引用解析為直接引用,進(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)造方法");} } // 測(cè)試 public class Demopublic static void main(String[] args){// 創(chuàng)建子類對(duì)象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一個(gè)對(duì)象,new S(); 在子類的構(gòu)造方法中會(huì)有默認(rèn)的super(),加載父類,如果子類調(diào)用默認(rèn)調(diào)用super(),而父類沒有無參的構(gòu)造方法,而是有參的構(gòu)造方法,那么就要自己添加,在super(xxx)中。
往后余生,唯獨(dú)有你
簡(jiǎn)書作者:達(dá)叔小生
90后帥氣小伙,良好的開發(fā)習(xí)慣;獨(dú)立思考的能力;主動(dòng)并且善于溝通
簡(jiǎn)書博客: https://www.jianshu.com/u/c785ece603d1
結(jié)語
- 下面我將繼續(xù)對(duì) 其他知識(shí) 深入講解 ,有興趣可以繼續(xù)關(guān)注
- 小禮物走一走 or 點(diǎn)贊
轉(zhuǎn)載于:https://www.cnblogs.com/dashucoding/p/9665790.html
總結(jié)
以上是生活随笔為你收集整理的第44节:Java当中的JVM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快递物流查询接口介绍
- 下一篇: flask之flask_socketio