欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單了解Java程序運(yùn)行整體流程

 更新時(shí)間:2020年07月03日 16:03:41   作者:Tim_Bergling  
這篇文章主要介紹了簡單了解Java程序運(yùn)行整體流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

概述

Java程序從創(chuàng)建源文件到程序運(yùn)行要經(jīng)歷兩個(gè)主要步驟:

  • 源文件 編譯器編譯> 字節(jié)碼文件(ByteCode)。
  • 字節(jié)碼文件 JVM解釋運(yùn)行> 在內(nèi)存中運(yùn)行

Java程序從編譯到運(yùn)行

示例程序:

public class ClassA{
  public static void main(String[] args){
    ClassB b = new ClassB("b");
    b.method();
  }
}

class ClassB{
  private String name;
  public ClassB(String name){
    this.name = name;
  }
  
  public void method(){
    System.out.println("ClassB method()");
  }

}

編譯

  • 源文件被編譯成.class文件。
  • 若一個(gè)類所依賴的類還沒有編譯,則先編譯被依賴的類,然后引用。
  • 若已編譯,則直接引用。
  • 若找不到指定類的文件,則拋出cannot find symbol錯(cuò)誤。
  • 編譯后生成的字節(jié)碼文件由兩部分組成:
    • 常量池:代碼中的所有token(類名,成員變量名)和符號(hào)引用(方法引用,成員變量引用)
    • 方法字節(jié)碼:類中各個(gè)方法的字節(jié)碼。

運(yùn)行

Java類的運(yùn)行過程:

  • 類的加載
  • 類的執(zhí)行

注:

JVM在程序第一次主動(dòng)使用類的時(shí)候才加載類,而不是一開始將所有的類都加載到內(nèi)存中,只加載一次。

詳細(xì)步驟:

  • 系統(tǒng)啟動(dòng)一個(gè)JVM進(jìn)程,JVM從classpath路徑中查找對(duì)應(yīng)的字節(jié)碼文件,將對(duì)應(yīng)的類信息加載到運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法區(qū)內(nèi)(類的加載)。
  • JVM找到類的主函數(shù)入口,執(zhí)行main函數(shù)。
  • 若需創(chuàng)建對(duì)象,而方法區(qū)沒有該類的信息,則加載對(duì)應(yīng)的類,并把類信息放入方法區(qū)。
  • 加載所需的類后,JVM在堆區(qū)中為實(shí)例對(duì)象分配內(nèi)存,并調(diào)用構(gòu)造函數(shù)初始化實(shí)例。(該實(shí)例有指向方法區(qū)對(duì)應(yīng)類的類信息的引用)
  • 當(dāng)調(diào)用實(shí)例的方法時(shí),JVM由對(duì)象引用找到堆中的對(duì)象,再由對(duì)象持有的引用定位到方法區(qū)中類的類型信息的方法表,從而獲得待調(diào)用函數(shù)的字節(jié)碼的地址。
  • 開始執(zhí)行調(diào)用的函數(shù)。

注:

  • public和protected的實(shí)例方法采用動(dòng)態(tài)綁定機(jī)制:要用到方法表。
  • private,static,構(gòu)造器和初始化方法采用靜態(tài)綁定機(jī)制:不需要方法表。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java.lang.ClassCastException的問題解決

    java.lang.ClassCastException的問題解決

    本文主要介紹了java.lang.ClassCastException的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 你知道將Bean交給Spring容器管理有幾種方式(推薦)

    你知道將Bean交給Spring容器管理有幾種方式(推薦)

    Spring核心是?IOC?和?AOP?,我們?cè)赟pring項(xiàng)目中,我們需要將Bean交給Spring容器,也就是IOC管理,這樣你才可以使用注解來進(jìn)行依賴注入,這篇文章主要介紹了你知道將Bean交給Spring容器管理有幾種方式,需要的朋友可以參考下
    2022-10-10
  • java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停)

    java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停)

    這篇文章主要介紹了java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • java接口性能優(yōu)化技巧

    java接口性能優(yōu)化技巧

    這篇文章主要為大家介紹了java接口性能優(yōu)化技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java延時(shí)的3種實(shí)現(xiàn)方法舉例

    Java延時(shí)的3種實(shí)現(xiàn)方法舉例

    這篇文章主要給大家介紹了關(guān)于Java延時(shí)的3種實(shí)現(xiàn)方法舉例,java開發(fā)中常會(huì)用到延時(shí)任務(wù),文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 詳解Java中的時(shí)區(qū)類TimeZone的用法

    詳解Java中的時(shí)區(qū)類TimeZone的用法

    TimeZone可以用來獲取或者規(guī)定時(shí)區(qū),也可以用來計(jì)算時(shí)差,這里我們就來詳解Java中的時(shí)區(qū)類TimeZone的用法,特別要注意下面所提到的TimeZone相關(guān)的時(shí)間校準(zhǔn)問題.
    2016-06-06
  • SpringCloud通用請(qǐng)求字段攔截處理方法

    SpringCloud通用請(qǐng)求字段攔截處理方法

    這篇文章主要介紹了SpringCloud通用請(qǐng)求字段攔截處理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java實(shí)現(xiàn)簡易拼圖游戲的方法詳解

    Java實(shí)現(xiàn)簡易拼圖游戲的方法詳解

    這篇文章主要介紹了如何利用Java語言實(shí)現(xiàn)簡易拼圖游戲,幫助大家更好的理解和使用Java開發(fā)游戲,感興趣的朋友可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • java編程實(shí)現(xiàn)根據(jù)EXCEL列名求其索引的方法

    java編程實(shí)現(xiàn)根據(jù)EXCEL列名求其索引的方法

    這篇文章主要介紹了java編程實(shí)現(xiàn)根據(jù)EXCEL列名求其索引的方法,涉及Java元素遍歷與數(shù)學(xué)運(yùn)算的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Java優(yōu)秀測試框架TestNG詳解

    Java優(yōu)秀測試框架TestNG詳解

    這篇文章主要為大家詳細(xì)介紹了Java優(yōu)秀測試框架TestNG,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評(píng)論