国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Git常用命令面試題 60道

2022-09-23 10:36 作者:要寵你上天  | 我要投稿

Java內(nèi)存模型

1. 我們開發(fā)人員編寫的Java代碼是怎么讓電腦認識的

首先先了解電腦是二進制的系統(tǒng),他只認識 01010101

比如我們經(jīng)常要編寫 HelloWord.java 電腦是怎么認識運行的HelloWord.java是我們程序員編寫的,我們?nèi)丝梢哉J識,但是電腦不認識

Java文件編譯的過程

1. 程序員編寫的.java文件

2. 由javac編譯成字節(jié)碼文件.class:(為什么編譯成class文件,因為JVM只認識.class文件)

3. 在由JVM編譯成電腦認識的文件 (對于電腦系統(tǒng)來說 文件代表一切)

2. 為什么說java是跨平臺語言

這個跨平臺是中間語言(JVM)實現(xiàn)的跨平臺

Java有JVM從軟件層面屏蔽了底層硬件、指令層面的細節(jié)讓他兼容各種系統(tǒng)難道 C 和 C++ 不能跨平臺嗎?

其實也可以 C和C++需要在編譯器層面去兼容不同操作系統(tǒng)的不同層面,寫過C和C++的就知道不同操作系統(tǒng)的有些代碼是不一樣

3. Jdk和Jre和JVM的區(qū)別

Jdk包括了Jre和Jvm,Jre包括了Jvm

Jdk是我們編寫代碼使用的開發(fā)工具包

Jre 是Java的運行時環(huán)境,他大部分都是 C 和 C++ 語言編寫的,他是我們在編譯java時所需要的基礎的類庫

Jvm俗稱Java虛擬機,他是java運行環(huán)境的一部分,它虛構出來的一臺計算機,在通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)Java應用程序

看Java官方的圖片,Jdk中包括了Jre,Jre中包括了JVM

4. 說一下 JVM由那些部分組成,運行流程是什么?

JVM包含兩個子系統(tǒng)和兩個組件: 兩個子系統(tǒng)為Class loader(類裝載)、Execution engine(執(zhí)行引擎); 兩個組件為Runtime data area(運行時數(shù)據(jù)區(qū))、Native Interface(本地接口)。

Class loader(類裝載):根據(jù)給定的全限定名類名(如:java.lang.Object)來裝載class文件到Runtime data area中的method area。

Execution engine(執(zhí)行引擎):執(zhí)行classes中的指令。

Native Interface(本地接口):與native libraries交互,是其它編程語言交互的接口。

Runtime data area(運行時數(shù)據(jù)區(qū)域):這就是我們常說的JVM的內(nèi)存。

流程 :首先通過編譯器把 Java 代碼轉換成字節(jié)碼,類加載器(ClassLoader)再把字節(jié)碼加載到內(nèi)存中,將其放在運行時數(shù)據(jù)區(qū)(Runtime data area)的方法區(qū)內(nèi),而字節(jié)碼文件只是 JVM 的一套指令集規(guī)范,并不能直接交給底層操作系統(tǒng)去執(zhí)行,因此需要特定的命令解析器執(zhí)行引擎(Execution Engine),將字節(jié)碼翻譯成底層系統(tǒng)指令,再交由 CPU 去執(zhí)行,而這個過程中需要調(diào)用其他語言的本地庫接口(Native Interface)來實現(xiàn)整個程序的功能。

5. 說一下 JVM 運行時數(shù)據(jù)區(qū)

Java 虛擬機在執(zhí)行 Java 程序的過程中會把它所管理的內(nèi)存區(qū)域劃分為若干個不同的數(shù)據(jù)區(qū)域。這些區(qū)域都有各自的用途,以及創(chuàng)建和銷毀的時間,有些區(qū)域隨著虛擬機進程的啟動而存在,有些區(qū)域則是依賴線程的啟動和結束而建立和銷毀。Java 虛擬機所管理的內(nèi)存被劃分為如下幾個區(qū)域:

簡單的說就是我們java運行時的東西是放在那里的

程序計數(shù)器(Program Counter Register):當前線程所執(zhí)行的字節(jié)碼的行號指示器,字節(jié)碼解析器的工作是通過改變這個計數(shù)器的值,來選取下一條需要執(zhí)行的字節(jié)碼指令,分支、循環(huán)、跳轉、異常處理、線程恢復等基礎功能,都需要依賴這個計數(shù)器來完成;

為什么要線程計數(shù)器?因為線程是不具備記憶功能

Java 虛擬機棧(Java Virtual Machine Stacks):每個方法在執(zhí)行的同時都會在Java 虛擬機棧中創(chuàng)建一個棧幀(Stack Frame)用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息;

棧幀就是Java虛擬機棧中的下一個單位

本地方法棧(Native Method Stack):與虛擬機棧的作用是一樣的,只不過虛擬機棧是服務 Java方法的,而本地方法棧是為虛擬機調(diào)用 Native 方法服務的;

Native 關鍵字修飾的方法是看不到的,Native 方法的源碼大部分都是 C和C++ 的代碼Java 堆(Java Heap):Java 虛擬機中內(nèi)存最大的一塊,是被所有線程共享的,幾乎所有的對象實例都在這里分配內(nèi)存;

方法區(qū)(Methed Area):用于存儲已被虛擬機加載的類信息、常量、靜態(tài)變量、即時編譯后的代碼等數(shù)據(jù)。

6. 詳細的介紹下程序計數(shù)器?(重點理解)

1. 程序計數(shù)器是一塊較小的內(nèi)存空間,它可以看作是:保存當前線程所正在執(zhí)行的字節(jié)碼指令的地址(行號)

2. 由于Java虛擬機的多線程是通過線程輪流切換并分配處理器執(zhí)行時間的方式來實現(xiàn)的,一個處理器都只會執(zhí)行一條線程中的指令。因此,為了線程切換后能恢復到正確的執(zhí)行位置,每條線程都有一個獨立的程序計數(shù)器,各個線程之間計數(shù)器互不影響,獨立存儲。稱之為“線程私有”的內(nèi)存。程序計數(shù)器內(nèi)存區(qū)域是虛擬機中唯一沒有規(guī)定OutOfMemoryError情況的區(qū)域。

7. 詳細介紹下Java虛擬機棧?(重點理解)

8. 詳細的介紹下Java堆?(重點理解)

9. 能不能解釋一下本地方法棧?

10. 能不能解釋一下方法區(qū)(重點理解)

......

......

......


Git常用命令面試題 60道的評論 (共 條)

分享到微博請遵守國家法律
南华县| 炎陵县| 察哈| 扎赉特旗| 农安县| 崇文区| 博野县| 青铜峡市| 汶川县| 万载县| 陈巴尔虎旗| 灵璧县| 昌图县| 泸西县| 龙胜| 大渡口区| 临安市| 元谋县| 武清区| 北流市| 乌拉特后旗| 扶余县| 重庆市| 嵩明县| 睢宁县| 东港市| 广元市| 保德县| 社旗县| 迭部县| 垦利县| 晋宁县| 天柱县| 土默特左旗| 太和县| 平昌县| 中卫市| 梓潼县| 永平县| 石门县| 崇左市|