1. 程式人生 > >Java虛擬機器面試問題

Java虛擬機器面試問題

Java虛擬機器中的多執行緒是通過執行緒輪流切換並並分配處理器的時間來實現的,對於任意一個時刻,一個處理器(對於多核處理器而言是一個核)只會執行一條執行緒中的指令,因此為了執行緒切換後都能夠恢復到正確的執行位置,每條執行緒都需要有一個獨立的程式計數器
Java虛擬機器棧描述的是java方法的執行的記憶體模型,每個方法在執行的時候都會建立一個棧幀,用於儲存區域性變量表,運算元棧,方法出口等,一個方法從呼叫到執行完成就對應著棧幀在虛擬機器中入棧到出棧的過程。為執行緒私有,生命週期與執行緒相同。
本地方法棧和虛擬機器棧的作用非常相似,但是其存在目的是為了本地方法而存在的,簡單的說Java的Naive方法就是方法的實現是由非Java語言在外面實現的,是由Java呼叫非Java方法的一個介面。
Java堆

是被所有執行緒所共享的一塊區域,其目的就是為了儲存物件例項,所有的物件例項都存放在堆中,從垃圾回收的角度,由於現在的收集器基本都採用的是分代回收的演算法,所以Java堆還可以被細分為新生代和老生代。Java堆中可以存在在物理上不連續的記憶體空間,只要邏輯上連續即可。
Java堆中的記憶體分配假設Java堆中的記憶體是絕對完整的,被劃分為已使用和未使用兩個區域,中間通過位置指標記錄位置,這樣的話給新生成的物件劃分記憶體空間,那麼只需要將指標向未劃分的區域移動,這稱作是指標碰撞。那如果未使用的區域不是連續的,則需要一個列表來記錄並維護能夠使用的區域。
Java中的垃圾清除演算法

  • 標記-清除演算法
    首先標記出所有要回收的物件,之後在統一清除,該演算法的缺點在於效率不高,同時清除之後會產生大量的記憶體不連續區域,會提前觸發第二次的清除。

  • 複製演算法
    可將記憶體按容量劃分為相等的兩塊,每次只是用一塊,當一塊用完了將依舊存活著的物件複製到另一塊中,將使用的這一塊清理掉。缺點是每次只能使用一半的記憶體。

  • 標記整理演算法
    和標記清除演算法相似但是區別是後續步驟並非將可回收物件進行清除,而是讓存活物件向一端移動。
  • 分代收集演算法
    根據物件的存活週期將記憶體分為新生代和老年代,在新生代中物件大量死去少量存活,採用複製演算法,老年代中存活率高,採用標記整理演算法。

相關推薦

java虛擬機器面試乾貨【捌】_JVM配置引數

本文總結一下JVM中常用的配置引數。堆記憶體相關的JVM引數-Xms設定Java應用程式啟動時的初始堆大小。-Xmx設定Java應用程式能獲得的最大堆大小。-Xss設定執行緒桟的大小。-XX:MinHe

java虛擬機器面試乾貨【拾】_G1 GC的回收機制

簡單來說,G1 GC的收集分為4個階段:年輕代GC,併發標記週期,混合回收和full GC。年輕代GCG1 GC的年輕代回收基本沿襲了之前的設計,通過複製演算法和一個Eden區、兩個Survivor區實現。但區別在於,大物件的分配是可以直接到大物件區間的(詳見上文)。此外,在

java虛擬機器面試乾貨【玖】_G1 GC的空間劃分

之前有看過介紹G1回收器的知識,但是一直沒有去完成一個整理。接著今天的功夫,好好把這部分知識總結一下。什麼是G1 GC通過前面的文章我們知道,在JDK 1.6版本之前,我們一般是使用ParNew+CMS兩個垃圾回收器來完成JVM中的垃圾回收的。但是它們的實現並不算特別的高效,

Java虛擬機器面試知識點歸納【JAVA核心】

1.JAVA記憶體結構 Java虛擬機器管理的記憶體包括幾個執行時資料記憶體:方法區、虛擬機器棧、堆、本地方法棧、程式計數器,其中方法區和堆是由執行緒共享的資料區,其他幾個是執行緒隔離的資料區。  1.1 程式計數器 每個執行緒擁有一個PC暫存器 線上程建立時建

Java虛擬機器面試問題

Java虛擬機器中的多執行緒是通過執行緒輪流切換並並分配處理器的時間來實現的,對於任意一個時刻,一個處理器(對於多核處理器而言是一個核)只會執行一條執行緒中的指令,因此為了執行緒切換後都能夠恢復到正確的

深入java虛擬機器面試

請你說一下jvm: 對於虛擬機器我給它分成三大塊內容分別是:記憶體管理、類載入引擎技術、執行緒安全首先就記憶體管理來說,虛擬機器給記憶體劃分為:堆、棧、方法區、執行時常量池、本地方法棧、直接記憶體。堆是執行緒共享的記憶體塊,而堆又細化分為eden區年輕代、survivor區

《深入理解java虛擬機器》 精華總結(面試

文章目錄 一、執行時資料區域 1.1 程式計數器 1.2 Java虛擬機器棧 1.3 本地方法棧 1.4 Java堆 1.5 方法區 1.6 執行時常量池 二、hotspot虛擬機器物件

如何在面試時搞定 Java 虛擬機器

作者 | 倪升武 責編 | 胡巍巍 筆者最近抽空看了一點《深入理解Java虛擬機器》,本篇文章主要來總結一下Java虛擬機器記憶體的各個區域,以及這些區域的作用、服務物件以及其中可能產生的問題,作為大家的面試寶典。 首先我們來看一下Java執行時的資料區域,

面試中關於Java虛擬機器(jvm)的問題看這篇就夠了

最近看書的過程中整理了一些面試題,面試題以及答案都在我的文章中有所提到,希望你能在以問題為導向的過程中掌握虛擬機器的核心知識。面試畢竟是面試,核心知識我們還是要掌握的,加油。 下面是按jvm虛擬機器知識點分章節總結的一些jvm學習與面試相關的一些東西。一般作為Java程式設

Java面試寶典】深入理解JAVA虛擬機器

一、執行時資料區域   執行緒隔離:執行緒隔離的意思,就是給不同的執行緒多分配的資源用,以做到不爭用。   執行緒共享:執行緒共享就是資源只有一個沒有辦法分配更多,只能共享。   Java虛擬機器管理的記憶體包括幾個執行時資料記憶體:方法區、虛擬機器棧、本地方法棧、堆、程式計數器,其中方法區和堆是由執行

java虛擬機器面試問題

 1,java虛擬機器的5部分:堆、方法區、棧幀、程式計數器、本地方法區。首先java程式碼會被編譯器編譯成class檔案,在程式載入的時候,虛擬機器的類載入器會把對應的Class檔案載入到記憶體中,尋找main方法,啟動一個普通執行緒,生成棧幀,一個執行緒對應一個棧幀,用於儲存物件執行過程中的所有變數以及中

深入理解Java虛擬機器 精華總結(面試

一.執行時資料區域   Java虛擬機器管理的記憶體包括幾個執行時資料記憶體:方法區、虛擬機器棧、堆、本地方法棧、程式計數器,其中方法區和堆是由執行緒共享的資料區,其他幾個是執行緒隔離的資料區。   1.1程式計數器   程式計數器是一塊較小的記憶體,他可以看做

Java虛擬機器知識彙總,有這些還怕面試被問到?

首先我們來看一下Java執行時的資料區域,Java虛擬機器在執行Java程式的過程中,會把它所管理的記憶體,劃分成若干個不同的資料區域,這些區域都有各自的用途,各自的建立和銷燬的時間。 有的區域,隨著虛擬機器程序的啟動而存在;有些區域,則依賴使用者執行緒的啟動和結束而建立和銷燬。 我們來看一

【深入Java虛擬機器】之精華總結(面試

一.執行時資料區域   Java虛擬機器管理的記憶體包括幾個執行時資料記憶體:方法區、虛擬機器棧、堆、本地方法棧、程式計數器,其中方法區和堆是由執行緒共享的資料區,其他幾個是執行緒隔離的資料區。   1.1程式計數器   程式計數器是一塊較小的記憶體,他可以看做是當前執行緒所執行的行號指示器

全面解讀java虛擬機器面試考點大全)

 學習java以來,jvm的原理已經看過好多遍了,但是許多知識點都串不起來。今天我把jvm相關知識整理了一下,看完之後肯定會對JVM非常的清楚。 JVM是虛擬機器,也是一種規範,他遵循著馮·諾依曼體系結構的設計原理。馮·諾依曼體系結構中,指出計算機處理的資料和指令都

java架構之路-(面試篇)JVM虛擬機器面試大全

  下文連線比較多啊,都是我過整理的部落格,很多答案都在部落格裡有詳細說明,理解記憶是最紮實的記憶。而且我的答案不一定是最準確的,但是我的答案不會讓你失望,而且幾乎每個答案都是問題的擴充套件答案。 1.JVM記憶體模型   答:https://www.cnblogs.com/cxiaocai/p/114836

JVM原理速記複習Java虛擬機器總結思維導圖面試必備

良心製作,右鍵另存為儲存 喜歡可以點個贊哦 Java虛擬機器 一、執行時資料區域 執行緒私有 程式計數器 記錄正在執行的虛擬機器位元組碼指令的地址(如果正在執行的是Native方法則為空),是唯一一個沒有規定OOM(OutOfMemoryError)的區域。 Java虛擬機器棧 每個Java方法在

《深入理解Java虛擬機器》個人讀書總結——垃圾收集/回收演算法

說起垃圾回收,我估計很多初級java開發(包括之前的我)想到的是這個JVM會幫我管理的啊,我們不太需要去考慮這種事情。但是,當需要排查各種記憶體溢位、記憶體洩漏問題時,當垃圾收整合為系統達到更高併發量的瓶頸的時候,我們就有必要對垃圾回收GC進行了解了。思考GC需要完成的3件事情: 1.

《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體

《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體 最近在讀《深入理解Java虛擬機器》,網上對Java虛擬機器的總結有很多,自己覺得自己也應該記錄一點個人的讀書總結,以便日後複習方便。 隨著開發工作的逐漸深入,對Java的理解不能止步於crud,Java不像C語言

《深入理解Java虛擬機器》個人讀書總結——虛擬機器類載入機制

我們都知道Java虛擬機器是用來執行我們編譯好的.class檔案的,class檔案中夾帶類的各種資訊,虛擬機器要執行這些檔案,第一件事就是要載入到虛擬機器中,這就引出了這次總結的問題——虛擬機器是如何載入這些class檔案的?載入後虛擬機器是怎麼處理檔案中夾帶的資訊的? 類載入機制