更新時間:2020-05-19 15:07:59 來源:動力節點 瀏覽2655次
1.JVM的類加載機制是什么?有哪些實現方式?
類加載機制:
類的加載指的是將類的.class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法去內,然后在堆區創建一個java.lang.Class對象,用來封裝在方法區內的數據結構。類的加載最終是在堆區內的Class對象,Class對象封裝了類在方法區內的數據結構,并且向Java程序員提供了訪問方法區內的數據結構的接口。
類加載有三種方式:
命令行啟動應用時候由JVM初始化加載
通過Class.forName()方法動態加載
通過ClassLoader.loadClass()方法動態加載
2.JVM的常見垃圾回收算法?
標記-清楚算法:前后線標記處所有需要回收的對象,在標記完成后統一回收有被標記的對象。
復制算法:將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當一塊內存用完了,將其存在另外一塊上面,然后再把已使用過的內存空間一次清理掉。
標記-整理算法:標記過程與“標記-清除”算法一樣,但后續步驟不是直接對可回收對象進行清理,而是讓所一端移動,然后直接清理掉端邊界以外的內存。
分代收集算法:一般是把Java堆分為新生代和老年代,根據各個年代的特點采用最適當的收集算法。新生代都發現有大批對象死去,選用復制算法。老年代中因為對象存活率高,必須使用“標記-清理”或“標記-整理”算法來進行回收。
3.JVM調優的常見命令行工具有哪些?JVM常見的調優參數有哪些?
(1)JVM調優的常見命令工具包括:
jps命令用于查詢正在運行的JVM進程,
jstat可以實時顯示本地或遠程JVM進程中類裝載、內存、垃圾收集、JIT編譯等數據
jinfo用于查詢當前運行這的JVM屬性和參數的值。
jmap用于顯示當前Java堆和永久代的詳細信息
jhat用于分析使用jmap生成的dump文件,是JDK自帶的工具
jstack用于生成當前JVM的所有線程快照,線程快照是虛擬機每一條線程正在執行的方法,目的是定位線程出現長時間停頓的原因。
(2)JVM常見的調優參數包括:
-Xmx
指定java程序的最大堆內存,使用java-Xmx5000M-version判斷當前系統能分配的最大堆內存
-Xms
指定最小堆內存,通常設置成跟最大堆內存一樣,減少GC
-Xmn
設置年輕代大小。整個堆大小=年輕代大小+年老代大小。所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。
-Xss
指定線程的最大??臻g,此參數決定了java函數調用的深度,值越大調用深度越深,若值太小則容易出棧溢出錯誤(StackOverflowError)
-XX:PermSize
指定方法區(永久區)的初始值,默認是物理內存的1/64,在Java8永久區移除,代之的是元數據區,由-XX:MetaspaceSize指定
-XX:MaxPermSize
指定方法區的最大值,默認是物理內存的1/4,在java8中由-XX:MaxMetaspaceSize指定元數據區的大小
-XX:NewRatio=n
年老代與年輕代的比值,-XX:NewRatio=2,表示年老代與年輕代的比值為2:1
-XX:SurvivorRatio=n
Eden區與Survivor區的大小比值,-XX:SurvivorRatio=8表示Eden區與Survivor區的大小比值是8:1:1,因為Survivor區有兩個(from,to)
4.ConcurrentHashMap加鎖機制是什么,詳細說一下?
HashTable容器在競爭激烈的并發環境下表現出效率低下的原因,是因為所有訪問HashTable的線程都必須競爭同一把鎖,那假如容器里有多把鎖,每一把鎖用于鎖容器其中一部分數據,那么當多線程訪問容器里不同數據段的數據時,線程間就不會存在鎖競爭,從而可以有效的提高并發訪問效率,這就是ConcurrentHashMap所使用的鎖分段技術,首先將數據分成一段一段的存儲,然后給每一段數據配一把鎖,當一個線程占用鎖訪問其中一個段數據的時候,其他段的數據也能被其他線程訪問。
精選11道Java技術面試題并有答案(包含部分阿里和華為的面試題)
5.G1收集器簡介?以及它的內存劃分怎么樣的?
(1)簡介:
Garbage-First(G1,垃圾優先)收集器是服務類型的收集器,目標是多處理器機器、大內存機器。它高度符合垃圾收集暫停時間的目標,同時實現高吞吐量。OracleJDK7update4以及更新發布版完全支持G1垃圾收集器
(2)G1的內存劃分方式:
它是將堆內存被劃分為多個大小相等的heap區,每個heap區都是邏輯上連續的一段內存(virtualmemory).其中一部分區域被當成老一代收集器相同的角色(eden,survivor,old),但每個角色的區域個數都不是固定的。這在內存使用上提供了更多的靈活性
以上就是動力節點java培訓機構的小編針對“精選華為java面試題,值得收藏”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習