更新時間:2023-01-13 17:20:34 來源:動力節點 瀏覽1149次
1. 我們開發人員編寫的Java代碼是怎么讓電腦認識的
首先先了解電腦是二進制的系統,他只認識 01010101
比如我們經常要編寫 HelloWord.java 電腦是怎么認識運行的HelloWord.java是我們程序員編寫的,我們人可以認識,但是電腦不認識
Java文件編譯的過程
1. 程序員編寫的.java文件
2. 由javac編譯成字節碼文件.class:(為什么編譯成class文件,因為JVM只認識.class文件)
3. 在由JVM編譯成電腦認識的文件 (對于電腦系統來說 文件代表一切)
2. 為什么說java是跨平臺語言
這個跨平臺是中間語言(JVM)實現的跨平臺
Java有JVM從軟件層面屏蔽了底層硬件、指令層面的細節讓他兼容各種系統難道 C 和 C++ 不能跨平臺嗎
其實也可以 C和C++需要在編譯器層面去兼容不同操作系統的不同層面,寫過C和C++的就知道不同操作系統的有些代碼是不一樣
3. Jdk和Jre和JVM的區別
Jdk包括了Jre和Jvm,Jre包括了Jvm
Jdk是我們編寫代碼使用的開發工具包
Jre 是Java的運行時環境,他大部分都是 C 和 C++ 語言編寫的,他是我們在編譯java時所需要的基礎的類庫
Jvm俗稱Java虛擬機,他是java運行環境的一部分,它虛構出來的一臺計算機,在通過在實際的計算機上仿真模擬各種計算機功能來實現Java應用程序
看Java官方的圖片,Jdk中包括了Jre,Jre中包括了JVM
4. 說一下 JVM由那些部分組成,運行流程是什么?
JVM包含兩個子系統和兩個組件: 兩個子系統為Class loader(類裝載)、Execution engine(執行引擎); 兩個組件為Runtime data area(運行時數據區)、Native Interface(本地接口)。
Class loader(類裝載):根據給定的全限定名類名(如:java.lang.Object)來裝載class文件到Runtime data area中的method area。
Execution engine(執行引擎):執行classes中的指令。
Native Interface(本地接口):與native libraries交互,是其它編程語言交互的接口。
Runtime data area(運行時數據區域):這就是我們常說的JVM的內存。
流程 :首先通過編譯器把 Java 代碼轉換成字節碼,類加載器(ClassLoader)再把字節碼加載到內存中,將其放在運行時數據區(Runtime data area)的方法區內,而字節碼文件只是 JVM 的一套指令集規范,并不能直接交給底層操作系統去執行,因此需要特定的命令解析器執行引擎(Execution Engine),將字節碼翻譯成底層系統指令,再交由 CPU 去執行,而這個過程中需要調用其他語言的本地庫接口(Native Interface)來實現整個程序的功能。
5. 說一下 JVM 運行時數據區
Java 虛擬機在執行 Java 程序的過程中會把它所管理的內存區域劃分為若干個不同的數據區域。這些區域都有各自的用途,以及創建和銷毀的時間,有些區域隨著虛擬機進程的啟動而存在,有些區域則是依賴線程的啟動和結束而建立和銷毀。Java 虛擬機所管理的內存被劃分為如下幾個區域:
簡單的說就是我們java運行時的東西是放在那里的
程序計數器(Program Counter Register):當前線程所執行的字節碼的行號指示器,字節碼解析器的工作是通過改變這個計數器的值,來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能,都需要依賴這個計數器來完成;
為什么要線程計數器?因為線程是不具備記憶功能
Java 虛擬機棧(Java Virtual Machine Stacks):每個方法在執行的同時都會在Java 虛擬機棧中創建一個棧幀(Stack Frame)用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息;
棧幀就是Java虛擬機棧中的下一個單位
本地方法棧(Native Method Stack):與虛擬機棧的作用是一樣的,只不過虛擬機棧是服務 Java方法的,而本地方法棧是為虛擬機調用 Native 方法服務的;
Native 關鍵字修飾的方法是看不到的,Native 方法的源碼大部分都是 C和C++ 的代碼Java 堆(Java Heap):Java 虛擬機中內存最大的一塊,是被所有線程共享的,幾乎所有的對象實例都在這里分配內存;
方法區(Methed Area):用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯后的代碼等數據。
以上就是“git的常用命令面試題,你知道多少”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習