<th id="6yc0e"></th>
  • <samp id="6yc0e"><pre id="6yc0e"></pre></samp>
  • <ul id="6yc0e"><pre id="6yc0e"></pre></ul><ul id="6yc0e"><pre id="6yc0e"></pre></ul>
    <samp id="6yc0e"><pre id="6yc0e"></pre></samp>
  • <th id="6yc0e"></th>
    <samp id="6yc0e"></samp>
  • <kbd id="6yc0e"><pre id="6yc0e"></pre></kbd>
    <samp id="6yc0e"></samp>
    <ul id="6yc0e"><tbody id="6yc0e"></tbody></ul>
  • <samp id="6yc0e"></samp>
  • 在线免费成人亚洲av,无码毛片一区二区本码视频,亚洲日韩一区精品射精,国产99视频精品免费视频36

    Java虛擬機是什么

    時間:2025-05-25 20:05:47 好文 我要投稿
    • 相關推薦

    Java虛擬機是什么

      什么是Java虛擬機

      作為一個Java程序員,我們每天都在寫Java代碼,我們寫的代碼都是在一個叫做Java虛擬機的東西上執(zhí)行的。但是如果要問什么是虛擬機,恐怕很多人就會模棱兩可了。在本文中,我會寫下我對虛擬機的理解。因為能力所限,可能有些地方描述的不夠欠當。如果你有不同的理解,歡迎交流。

      我們都知道Java程序必須在虛擬機上運行。那么虛擬機到底是什么呢?先看網上搜索到的比較靠譜的解釋:

      虛擬機是一種抽象化的計算機,通過在實際的計算機上仿真模擬各種計算機功能來實現的。Java虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM屏蔽了與具體操作系統平臺相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。

      這種解釋應該算是正確的,但是只描述了虛擬機的外部行為和功能,并沒有針對內部原理做出說明。一般情況下我們不需要知道虛擬機的運行原理,只要專注寫java代碼就可以了,這也正是虛擬機之所以存在的原因--屏蔽底層操作系統平臺的不同并且減少基于原生語言開發(fā)的復雜性,使java這門語言能夠跨各種平臺(只要虛擬機廠商在特定平臺上實現了虛擬機),并且簡單易用。這些都是虛擬機的外部特性,但是從這些信息來解釋虛擬機,未免太籠統了,無法讓我們知道內部原理。

      從進程的角度解釋JVM

      讓我們嘗試從操作系統的層面來理解虛擬機。我們知道,虛擬機是運行在操作系統之中的,那么什么東西才能在操作系統中運行呢?當然是進程,因為進程是操作系統中的執(zhí)行單位。可以這樣理解,當它在運行的時候,它就是一個操作系統中的進程實例,當它沒有在運行時(作為可執(zhí)行文件存放于文件系統中),可以把它叫做程序。

      對命令行比較熟悉的同學,都知道其實一個命令對應一個可執(zhí)行的二進制文件,當敲下這個命令并且回車后,就會創(chuàng)建一個進程,加載對應的可執(zhí)行文件到進程的地址空間中,并且執(zhí)行其中的指令。下面對比C語言和Java語言的HelloWorld程序來說明問題。

      首先編寫C語言版的HelloWorld程序。

      [cpp] view plain copy#include

      #include

      int main(void) {

      printf("hello world

      ");

      return 0;

      }

      編譯C語言版的HelloWorld程序:

      [plain] view plain copygcc HelloWorld.c -o HelloWorld

      運行c語言版的HelloWorld程序:

      [plain] view plain copyzhangjg@linux:/deve/workspace/HelloWorld/src$ ./HelloWorld

      hello world

      gcc編譯器編譯后的文件直接就是可操作系統識別的二進制可執(zhí)行文件,當我們在命令行中敲下 ./HelloWorld這條命令的時候, 直接創(chuàng)建一個進程, 并且將可執(zhí)行文件加載到進程的地址空間中, 執(zhí)行文件中的指令。

      作為對比, 我們看一下Java版HelloWord程序的編譯和執(zhí)行形式。

      首先編寫源文件HelloWord.java :

      [java] view plain copypublic class HelloWorld {

      public static void main(String[] args) {

      System.out.println("HelloWorld");

      }

      }

      編譯Java版的HelloWorld程序:

      [java] view plain copyzhangjg@linux:/deve/workspace/HelloJava/src$ javac HelloWorld.java

      zhangjg@linux:/deve/workspace/HelloJava/src$ ls

      HelloWorld.class HelloWorld.java

      運行Java版的HelloWorld程序:

      [plain] view plain copyzhangjg@linux:/deve/workspace/HelloJava/src$ java -classpath . HelloWorld

      HelloWorld

      從上面的過程可以看到, 我們在運行Java版的HelloWorld程序的時候, 敲入的命令并不是 ./HelloWorld.class 。 因為class文件并不是可以直接操作系統識別的二進制可執(zhí)行文件 。 我們敲入的是java這個命令。 這個命令說明, 我們首先啟動的是一個叫做java的程序, 這個java程序在運行起來之后就是一個JVM進程實例。

      上面的命令執(zhí)行流程是這樣的:

      java命令首先啟動虛擬機進程,虛擬機進程成功啟動后,讀取參數“HelloWorld”,把他作為初始類加載到內存,對這個類進行初始化和動態(tài)鏈接(關于類的初始化和動態(tài)鏈接會在后面的博客中介紹),然后從這個類的main方法開始執(zhí)行。也就是說我們的class文件不是直接被系統加載后直接在cpu上執(zhí)行的,而是被一個叫做虛擬機的進程托管的。首先必須虛擬機進程啟動就緒,然后由虛擬機中的類加載器加載必要的class文件,包括jdk中的基礎類(如String和Object等),然后由虛擬機進程解釋class字節(jié)碼指令,把這些字節(jié)碼指令翻譯成本機cpu能夠識別的指令,才能在cpu上運行。

      從這個層面上來看,在執(zhí)行一個所謂的java程序的時候,真真正正在執(zhí)行的是一個叫做Java虛擬機的進程,而不是我們寫的一個個的class文件。這個叫做虛擬機的進程處理一些底層的操作,比如內存的分配和釋放等等。我們編寫的class文件只是虛擬機進程執(zhí)行時需要的“原料”。這些“原料”在運行時被加載到虛擬機中,被虛擬機解釋執(zhí)行,以控制虛擬機實現我們java代碼中所定義的一些相對高層的操作,比如創(chuàng)建一個文件等,可以將class文件中的信息看做對虛擬機的控制信息,也就是一種虛擬指令。

      編程語言也有自己的原理, 學習一門語言, 主要是把它的原理搞明白。 看似一個簡單的HelloWorld程序, 也有很多深入的內容值得剖析。

    【Java虛擬機是什么】相關文章:

    Java架構師的職責02-27

    Java架構師的具體職責09-23

    【優(yōu)選】Java架構師的職責02-27

    Java初級開發(fā)工程師的職責05-28

    中級Java開發(fā)工程師的職責08-26

    Java高級開發(fā)工程師的基本職責03-15

    Java中高級開發(fā)工程師的職責08-26

    生命是什么09-08

    幸福是什么08-21

    主站蜘蛛池模板: 亚洲国产成人久久综合三区 | 强奷漂亮人妻系列老师| 疯狂做受XXXX高潮国产| 乱子真实露脸刺激对白| 人妻中文字幕亚洲精品| 12裸体自慰免费观看网站| 国产一区二区不卡91| 久久99热只有频精品6狠狠| 日韩中文字幕有码av| 西西人体44WWW高清大胆| 国产精品中文字幕久久| 无码欧亚熟妇人妻AV在线外遇| 高清中文字幕一区二区| 亚洲国产精品久久久久久无码| 国产不卡精品视频男人的天堂| 又大又粗又硬又爽黄毛少妇| 亚洲综合精品成人| 国产乱啊有帅gv小太正| 亚洲国产精品自产在线播放| 亚洲色最新高清AV网站| 成A人片亚洲日本久久| 蜜桃视频一区二区在线观看| 中文人妻av高清一区二区| 蜜桃久久精品成人无码AV| 亚洲欧美综合中文| 亚洲中文久久久精品无码| 日产精品99久久久久久| 高清破外女出血AV毛片| 特级毛片A级毛片免费观看网站| 一区二区国产高清视频在线| 人妻一区二区三区三区| 全免费A级毛片免费看无码| 又粗又大又黄又硬又爽免费看| 香港日本三级亚洲三级| 宝贝腿开大点我添添公视频免| 精品日本一区二区三区在线观看 | 国内精品视频一区二区三区八戒 | 久亚洲一线产区二线产区三线产区 | 国产日韩综合av在线| 无码AV动漫精品专区| 日产精品99久久久久久|