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

歡迎訪問 生活随笔!

生活随笔

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

java

你写的 Java 代码是如何一步步输出结果的

發(fā)布時間:2025/3/21 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你写的 Java 代码是如何一步步输出结果的 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

對于任何一門語言,要想達到精通的水平,研究它的執(zhí)行原理(或者叫底層機制)不失為一種良好的方式。

在本篇文章中,將重點研究java源代碼的執(zhí)行原理,即從程序員編寫JAVA源代碼,到最終形成產(chǎn)品,在整個過程中,都經(jīng)歷了什么?每一步又是怎么執(zhí)行的?執(zhí)行原理又是什么?

一 編寫java源程序

java源文件:指存儲java源碼的文件。

先來看看如下代碼:

//MyTest被public修飾,故存儲該java源碼的文件名為MyTest publicclass MyTest {public static void main(String[] args){System.out.println("Test Java execute process.");} }//由于MyTest被public修飾了,故Class A不能用public修飾 class A{} //由于MyTest被public修飾了,故Class B不能用public修飾 class B{}

(1)java源文件名就是該源文件中public類的名稱

(2)一個java源文件可以包含多個類,但只允許一個類為public

二 編譯java源代碼

當(dāng)java源程序編碼結(jié)束后,就需要編譯器編譯。

安裝好jdk后,我們打開jdk目錄,有兩個.exe文件,即javac.exe(編譯源代碼,xxx.java文件) 和 java.exe(執(zhí)行字節(jié)碼,xxx.class文件).

如下圖所示:

1、切換到MyTest.java文件夾

2、javac.exe編譯MyTest.java

編譯后,發(fā)現(xiàn)e:\Blogs 目錄多了以class為后綴的文件:A.class,B.class和MyTest.class

Tip:?當(dāng)javac.exe編譯java源代碼時,java源代碼有幾個類,就會編譯成一個對應(yīng)的字節(jié)碼文件(.class文件)

其中,字節(jié)碼文件的文件名就是每個類的類名。需要注意的是,類即使不在源文件中定義,但被源文件引用,編譯后,也會編程相應(yīng)的字節(jié)碼文件。

如類A引用類C,但類C不定義在類A的源文件中,編譯后,類C也被編譯成對應(yīng)的字節(jié)碼文件C.class

三 執(zhí)行java源文件

執(zhí)行java源文件,用java.exe執(zhí)行即可

到現(xiàn)在,java源程序基本執(zhí)行結(jié)果,并正確打印我們期望的結(jié)果,那么,如上的步驟,我們可以總結(jié)如下:

如上總結(jié),已經(jīng)抽象化了在JVM中的執(zhí)行。接下來,我們將分析字節(jié)碼文件(.class文件)如何在虛擬機中一步一執(zhí)行的。

四 JVM如何執(zhí)行字節(jié)碼文

(一)裝載字節(jié)碼文件

當(dāng) .java 源碼被 javac.exe 編譯器編譯成 .class 字節(jié)碼文件后,接下來的工作就交給JVM處理。

JVM首先通過類加載器(ClassLoader),將class文件和相關(guān)Java API加載裝入JVM,以供JVM后續(xù)處理。

在該階段中,涉及到如下一些基本概念和知識。

1.JDK,JRE和JVM關(guān)系

  • JDK(Java Development Kit),Java開發(fā)工具包,主要用于開發(fā),在JDK7前,JDK包括JRE

  • JRE(Java Runtime Environment),Java程序運行的核心環(huán)境,包括JVM和一些核心庫

  • JVM(Java Virtual Machine),VM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的,是JRE核心模塊。

2.JVM

JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。

Java虛擬機的主要任務(wù)是裝載class文件,并執(zhí)行其中的字節(jié)碼,不同的Java虛擬機中,執(zhí)行引擎可能有不同的實現(xiàn)。

大致有如下幾種引擎:

  • 一次性解釋字節(jié)碼引擎

  • 即時編譯引擎

  • 自適應(yīng)優(yōu)化器

關(guān)于虛擬機的實現(xiàn)方式,采用軟件方式、硬件方式和軟件硬件結(jié)合方式,這個要根據(jù)具體廠商而定。

3.什么是ClassLoader

虛擬機的主要任務(wù)是裝載class文件并執(zhí)行其中的字節(jié)碼,而class文件是由虛擬機的類加載器(ClassLoader)完成的,在一個Java虛擬機中有可能存在多個類加載器。

任何java運用程序,可能會使用兩種類加載器,即啟動類加載器(bootstrap)和用戶自定義類加載器。

啟動類加載器是Java虛擬機唯一實現(xiàn)的一部分,它又可分為原始類裝載器,系統(tǒng)類裝載器或默認(rèn)類裝載器。它的主要作用是從操作系統(tǒng)的磁盤裝載相應(yīng)的類,如Java API類等。

用戶自定義裝載類,即按照用戶自定義的方式來裝載類。

(二)將字節(jié)碼文件存儲在JVM內(nèi)存區(qū)

當(dāng)JAVA虛擬機運行一個程序時,它需要內(nèi)存來存儲許多東西。

比如如字節(jié)碼,程序創(chuàng)建的對象,傳遞給方法的參數(shù),返回值,局部變量以及運算的中間結(jié)果等,這些相關(guān)信息被組織到“運行時數(shù)據(jù)區(qū)”。

根據(jù)廠商的不同,在Java虛擬機中,運行時數(shù)據(jù)區(qū)也有所不同。有些運行時數(shù)據(jù)區(qū)由線程共享,有些只能由某個特定線程共享。

運行時數(shù)據(jù)區(qū)大致可分幾個區(qū):方法區(qū),堆區(qū),棧區(qū),PC寄存器區(qū)和本地方法棧區(qū)。

在該階段中,涉及到如下基本概念和知識。

1、方法區(qū)

方法區(qū)用來存儲解析被加載的class文件的相關(guān)信息。

當(dāng)虛擬裝載一個class文件后,它會從這個class文件包含的二進制數(shù)據(jù)中解析類型信息,然后將該相關(guān)信息存儲到方法區(qū)中。

2.堆

堆是用來存儲相關(guān)引用類型的,如new對象。當(dāng)程序運行時,虛擬機會把所有該程序在運行時創(chuàng)建的對象都放到堆中。

3.PC寄存器

PC寄存器主要用來存儲線程。當(dāng)新創(chuàng)建一個線程時,該線程都將得到一個自己的PC寄存器(程序計數(shù)器)以及一個java棧。

Java虛擬機沒有寄存器,其指令集使用Java棧來存儲中間數(shù)據(jù)。

4.棧區(qū)

棧區(qū)主要用來存儲值類型的,如基本數(shù)據(jù)類型。需要注意的是,String為引用類型,是存在堆中的。

Java棧是由許多棧幀組成的,一個棧幀包含一個Java方法調(diào)用的狀態(tài),當(dāng)線程調(diào)用一個方法時,虛擬機壓入一個新的棧幀到該線程的Java棧中,當(dāng)該方法返回時,這個棧幀從Java棧中彈出。

(三)執(zhí)行引擎與運行時數(shù)據(jù)區(qū)交互

運行時數(shù)據(jù)區(qū)為執(zhí)行引擎提供了執(zhí)行環(huán)境和相關(guān)數(shù)據(jù),執(zhí)行引擎通過與運行時數(shù)據(jù)區(qū)交互,從而獲取執(zhí)行時需要的相關(guān)信息,存儲執(zhí)行的中間結(jié)果等

(四)執(zhí)行引擎與本地方法接口

當(dāng)要執(zhí)行本地方法時,執(zhí)行引擎將調(diào)用本地方法接口來獲取相關(guān)OS本地方法。

需要注意的是,本地方法與操作系統(tǒng)強耦合的。

(五)JVM在具體操作系統(tǒng)上執(zhí)行

JVM通過調(diào)用本地接口來獲取本地方法,從而實現(xiàn)在具體的平臺上執(zhí)行。比如在Linux系統(tǒng)上執(zhí)行,在Window系統(tǒng)上執(zhí)行和在Unix系統(tǒng)上執(zhí)行。

五 參考文獻

1、深入Java虛擬機(原書第2版)(美)Bill Venners 著

2、Core Java Volume I - Fundamententals(10th Edition)

3、Core Java Volume I - Advanced Features(10th Edition)

總結(jié)

以上是生活随笔為你收集整理的你写的 Java 代码是如何一步步输出结果的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲综合99| 国产精品女优 | 在线免费观看av网站 | 日本美女性高潮 | 中文幕无线码中文字蜜桃 | 国产精品一区二区三区久久久 | 一区二区三区网站 | 欧产日产国产精品98 | 亚洲精品777| 一级肉体全黄裸片中国 | 影音先锋中文字幕人妻 | 懂色av一区二区三区蜜臀 | 超碰97国产| 国产精品视频看看 | 久久高清无码电影 | 欧美11一13sex性hd | 免费精品一区二区 | 九九视频免费 | 欧美一级高清片 | 老司机狠狠爱 | 天堂资源地址在线 | 中文字幕一区二区三区波野结 | 丁香婷婷在线观看 | 亚洲va韩国va欧美va | 午夜剧场在线 | 国产精品12区 | 两个人看的www视频免费完整版 | av免费在线观看网址 | 不卡av片| 好吊妞这里有精品 | 四色成人av永久网址 | 淫欲少妇| 美女黄视频在线观看 | 国产精品夜夜夜爽张柏芝 | 亚洲理论视频 | 国产激情视频在线 | 亚洲中文字幕一区在线 | 天天看天天爽 | 欧美丰满一区二区免费视频 | 国产一级不卡毛片 | 天天操夜操 | 午夜免费大片 | 久久五月视频 | 国产激情自拍视频 | 日本一区二区三区精品视频 | 中文在线а√在线 | 国产浮力影院 | 波多野结衣精品 | 亚洲高清欧美 | 九九热中文字幕 | 黄色日韩视频 | 日韩黄色三级 | 成人欧美一区二区三区黑人一 | 69视频网| 欧美视频在线免费看 | 国产在线观看免费网站 | 久久精品福利视频 | 美女免费看片 | 国产精品国色综合久久 | 中文字幕在线播放日韩 | 隔壁邻居是巨爆乳寡妇 | 青青草原在线免费观看视频 | 婷婷五月小说 | 久久人体视频 | 色中文字幕在线观看 | 色爱视频 | 五月天国产在线 | 国产女人高潮毛片 | 久久精品波多野结衣 | 又色又爽又黄18网站 | 国产视频精选 | 激情五月婷婷综合网 | 印度毛茸茸 | 特黄特色特刺激免费播放 | 污污内射久久一区二区欧美日韩 | 开心激情五月婷婷 | 公侵犯人妻一区二区三区 | av青草 | 亚洲最大成人综合网 | www.久久久 | 亚洲一区视频在线 | 日韩有码在线播放 | 国产偷拍一区二区 | h在线| 一级不卡 | 久久久久亚洲av成人无码电影 | 亚洲成人av一区二区 | 亚洲欧洲av | 欧美在线视频观看 | a在线观看免费 | 中文字幕超清在线免费观看 | 美女无遮挡网站 | 国产av一区二区三区 | 中文字幕视频网站 | 久久大伊人 | 看个毛片| 亚洲日本视频在线观看 | 国产成人亚洲一区二区 | 日韩免费在线观看 |