日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

這是一篇給Java初學者看的JVM文章

來源: 責編: 時間:2024-05-11 09:17:10 175觀看
導讀前言很多Java開發人員,還不清楚JVM是什么,就直接涉足JVM調優。很多Java開發人員,說起JVM,只知道運行時數據區域(或稱之為JVM內存布局或JVM內存結構)。還有很多Java開發人員,在被問起:“你知道Java內存模型嗎?”,答:“知道,Java內

前言

很多Java開發人員,還不清楚JVM是什么,就直接涉足JVM調優。9i928資訊網——每日最新資訊28at.com

很多Java開發人員,說起JVM,只知道運行時數據區域(或稱之為JVM內存布局或JVM內存結構)。9i928資訊網——每日最新資訊28at.com

還有很多Java開發人員,在被問起:“你知道Java內存模型嗎?”,答:“知道,Java內存模型分為方法區、堆、...”。9i928資訊網——每日最新資訊28at.com

......9i928資訊網——每日最新資訊28at.com

雖說“概念”這個詞發明出來是為了方便交流和說明問題的,不用太過于較真。但是,答非所問就是你的不對了。9i928資訊網——每日最新資訊28at.com

如果你屬于其中一者,我勸你看完這篇文章。9i928資訊網——每日最新資訊28at.com

本文就一個目的:認識JVM。9i928資訊網——每日最新資訊28at.com

從 Java 的跨平臺特性說起

認識JVM應該從哪里入手?9i928資訊網——每日最新資訊28at.com

可以問自己幾個問題,為什么有JVM?沒有JVM會怎樣?9i928資訊網——每日最新資訊28at.com

Java編程語言設計的初衷就是要解決一個問題:程序員編寫一次程序,可以在任何提供Java運行時環境的機器上運行。9i928資訊網——每日最新資訊28at.com

也就是Java語言的跨平臺特性“一次編寫,到處運行”。9i928資訊網——每日最新資訊28at.com

這一點可以在官方提供的文檔里證實:9i928資訊網——每日最新資訊28at.com

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-1.html9i928資訊網——每日最新資訊28at.com

可能有些Java開發人員對跨平臺特性不是很理解:“不應該就是編寫一次到處運行嗎?”。9i928資訊網——每日最新資訊28at.com

當然不是,如果了解C、C++語言的,就知道,想要在不同平臺上運行,需要分別編譯,甚至重新編寫。9i928資訊網——每日最新資訊28at.com

當然,這是所有編程語言都存在的問題。原因下面有說明。9i928資訊網——每日最新資訊28at.com

那么,Java是如何解決的?9i928資訊網——每日最新資訊28at.com

Java 跨平臺的實現:JVM

Java之所以能實現跨平臺,離不開JVM的支持。9i928資訊網——每日最新資訊28at.com

下面對此展開說明。9i928資訊網——每日最新資訊28at.com

JVM 的定義

JVM,全稱:Java Virtual Machine (Java 虛擬機)。9i928資訊網——每日最新資訊28at.com

下面是官方對JVM的定義:9i928資訊網——每日最新資訊28at.com

Java虛擬機是一種抽象的計算機。就像真正的計算機一樣,它有一個指令集,并在運行時處理各種內存區域。9i928資訊網——每日最新資訊28at.com

這個說明已經非常簡單明了了。如果不理解的繼續看下文。9i928資訊網——每日最新資訊28at.com

跨平臺問題說明

任何一個高級編程語言編寫的程序,在最終執行前,都會被翻譯成計算機可以理解的語言:機器碼,也就是諸如0101的二進制數。9i928資訊網——每日最新資訊28at.com

圖片圖片9i928資訊網——每日最新資訊28at.com

這些機器碼就是指令的實際表示,計算機的工作原理就是通過執行這些指令來完成具體的任務。9i928資訊網——每日最新資訊28at.com

(每一條指令中明確規定了計算機從哪個地址取數,進行什么操作,然后送到什么地址去等步驟)9i928資訊網——每日最新資訊28at.com

而同一個操作,在不同的平臺,指令可能會有所不同。9i928資訊網——每日最新資訊28at.com

例如,“將數據從內存加載到寄存器”的操作,在x86架構和ARM架構中,指令就不一樣:9i928資訊網——每日最新資訊28at.com

  • 在x86架構中,可能會使用MOV指令將數據加載到寄存器EAX中:
MOV EAX, [0x12345678]
  • 在ARM架構中,可能會使用LDR指令將數據加載到寄存器R0中:
LDR R0, [0x12345678]

所以,在一個平臺上編寫的程序要在其他平臺上運行,就需要重新編譯,甚至重寫。否則就會出現下圖現象。9i928資訊網——每日最新資訊28at.com

圖片圖片9i928資訊網——每日最新資訊28at.com

這也正是跨平臺問題存在的根本原因。9i928資訊網——每日最新資訊28at.com

從編碼到運行

而JVM作為一個抽象的計算機,對外提供了一套自己的指令集,作用何在?9i928資訊網——每日最新資訊28at.com

JVM指令集作用是:在不同平臺運行符合自己指令的程序時,會將該指令轉換成當前機器的本地指令。9i928資訊網——每日最新資訊28at.com

這樣就避免了多次編譯的操作,從而實現“一次編寫,到處運行”。9i928資訊網——每日最新資訊28at.com

或者這樣理解:JVM替代了多次編譯的工作。9i928資訊網——每日最新資訊28at.com

那么,“符合自己指令的程序”是什么呢?9i928資訊網——每日最新資訊28at.com

沒錯,就是Java字節碼(class文件)。9i928資訊網——每日最新資訊28at.com

我們平時在編寫完.java源碼后,會經過JDK提供的編譯工具(javac)編譯為.class,而.class文件里面的內容就是JVM指令。9i928資訊網——每日最新資訊28at.com

圖片圖片9i928資訊網——每日最新資訊28at.com

JVM 已成為規范

可能會有人有疑問,“為什么javac不直接編譯成機器碼?”9i928資訊網——每日最新資訊28at.com

三個方面回答這個問題:9i928資訊網——每日最新資訊28at.com

  1. 如果javac直接編譯成機器碼,就又回到跨平臺的問題了。
  2. JVM除了解決跨平臺問題外,還負責了內存管理和安全性的問題。
  3. 發展至今,JVM已經成為了一種規范,只要符合JVM規范,支持任何語言運行在JVM上。

圖片圖片9i928資訊網——每日最新資訊28at.com

JVM 的后續了解

通過上面的描述,如果理解了JVM是什么、JVM的作用或者JVM存在的意義,那就算是入門了。9i928資訊網——每日最新資訊28at.com

如果激發了你對“JVM指令是什么”以及“它們如何被轉換成機器指令”的好奇心,或者產生“類加載和JVM的關系”、“垃圾回收器和JVM的關系”等疑問。9i928資訊網——每日最新資訊28at.com

那么,請關注我,后面的文章會帶你一起了解。或者,自己可以去官方進行了解,官方文檔鏈接給你放在這。9i928資訊網——每日最新資訊28at.com

Java 各版本文檔:9i928資訊網——每日最新資訊28at.com

https://docs.oracle.com/en/java/javase/9i928資訊網——每日最新資訊28at.com

Java語言&JVM規范文檔:9i928資訊網——每日最新資訊28at.com

https://docs.oracle.com/javase/specs/index.html9i928資訊網——每日最新資訊28at.com

總結

最后總結一下本文內容:9i928資訊網——每日最新資訊28at.com

  1. 所有高級編程語言編寫的程序最終要翻譯為機器碼(指令的實際表示)才能被計算機理解。
  2. 由于計算機的硬件架構、操作系統不同,同一個操作指令可能也會不同。所以,程序要想在不同平臺上運行,需要重新翻譯或編寫。
  3. Java最初是為了解決程序跨平臺運行的問題,JVM正是實現跨平臺特性的關鍵所在。
  4. Java語言編寫的程序會被編譯為Java字節碼,也就是JVM自身的指令。運行時,JVM會將指令轉換成本地機器指令,從而實現跨平臺。
  5. JVM發展至今,已然是一個規范,已支持上百種編程語言。

當了解了JVM的作用、存在的意義,再去了解JVM的工作原理就不會那么困惑了。9i928資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-87960-0.html這是一篇給Java初學者看的JVM文章

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 總結CSS中各個屬性使用百分比(%)基準值

下一篇: 騰訊互娛面經詳解

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 于田县| 会理县| 万盛区| 玉溪市| 罗江县| 县级市| 吉隆县| 苍山县| 汉中市| 穆棱市| 桂平市| 江安县| 高陵县| 沧源| 阿尔山市| 庆安县| 荃湾区| 改则县| 冷水江市| 烟台市| 邹城市| 龙江县| 伽师县| 潼南县| 新沂市| 东城区| 镇雄县| 龙岩市| 金湖县| 富民县| 定远县| 同德县| 石首市| 商南县| 休宁县| 康定县| 屯门区| 页游| 芮城县| 信丰县| 崇阳县|