1. 程式人生 > >JAVA面試題總覽--JVM知識

JAVA面試題總覽--JVM知識

注:JAVA面試題總覽下的所有的題目都是由群:329019348 的群主和群友于2017-03-02 整理的,我只寫上自己的答案

1. 什麼情況下會發生棧記憶體溢位。

a.方法建立了一個很大的物件,如List,Array
b.是否產生了迴圈呼叫、死迴圈
c.是否引用了較大的全域性變數
==================================================================

2. JVM的記憶體結構,Eden和Survivor比例。

JVM記憶體結構分為兩種型別:
執行緒安全:虛擬機器棧、本地方法棧、程式計數器
非執行緒安全:堆,方法區

虛擬機器棧:每個方法被執行時,都會在記憶體中建立一個空間用來儲存方法中的區域性變數,方法的出入口等資訊。
本地方法棧

:每個本地方法被執行時,都會建立一個記憶體空間,用來儲存本地方法中的區域性變數,方法的出入口等資訊。
程式計數器:是當前程式所執行的class檔案的行號指示器,通過改變行號來決定下一段要執行的位元組碼指令,跳轉,迴圈,異常處理
:每一個物件的建立跟分配都是在堆上面進行的,堆分為新生代,老生代。新生代有一個Eden和兩個Survivor組成,預設比例是8:2。也可以使用-XXSurvivorRatio來改變百分比。
方法區:用來存放類的版本,類的方法還有static修飾的物件等資訊。

==================================================================


3. jvm中一次完整的GC流程是怎樣的,物件如何晉升到老年代,說說你知道的幾種主要的jvm引數。

GC流程圖

物件晉升老生代一共有三個可能:

1.當物件達到成年,經歷過15次GC(預設15次,可配置),物件就晉升為老生代

2.大的物件會直接在老生代建立

3.新生代跟倖存區記憶體不足時,物件可能晉升到老生代

jvm引數:

-Xms:初始堆大小

-Xmx:堆最大記憶體

-Xss:棧記憶體

-XX:PermSize 初始永久帶記憶體

-XX:MaxPermSize 最大永久帶記憶體

==================================================================


4. 你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms,包括原理,流程,優缺點

序列垃圾收集器:收集時間長,停頓時間久
併發垃圾收集器:碎片空間多
CMS:併發標記清除。他的主要步驟有:初始收集,併發標記,重新標記,併發清除(刪除),重置
G1:主要步驟:初始標記,併發標記,重新標記,複製清除(整理)

CMS的缺點是對cpu的要求比較高。G1是將記憶體化成了多塊,所有對內段的大小有很大的要求
CMS是清除,所以會存在很多的記憶體碎片。G1是整理,所以碎片空間較小

==================================================================

5. 垃圾回收演算法的實現原理。

常用的垃圾回收演算法有兩種: 引用計數和可達性分析

引用計數是增加一個欄位來標識當前的引用次數,引用計數為0的就是可以GC的。但是引用計數不能解決迴圈引用的問題
可達性分析:就是通過一系列GC ROOT的物件作為起點,向下搜尋,搜尋所有沒有與當前物件GC ROOT 有引用關係的物件。這些物件就是可以GC的。

==================================================================

6. 當出現了記憶體溢位,你怎麼排錯。

1.首先控制檯檢視錯誤日誌

2.然後使用jdk自帶的jvisualvm工具檢視系統的堆疊日誌

3.定位出記憶體溢位的空間:堆,棧還是永久代(jdk8以後不會出現永久代的記憶體溢位)。

4.如果是堆記憶體溢位,看是否建立了超大的物件

5.如果是棧記憶體溢位,看是否建立了超大的物件,或者產生了死迴圈。

==================================================================

7. JVM記憶體模型的相關知識瞭解多少,比如重排序,記憶體屏障,happen-before,主記憶體,工作記憶體等。

重排序:jvm虛擬機器允許在不影響程式碼最終結果的情況下,可以亂序執行。

記憶體屏障:可以阻擋編譯器的優化,也可以阻擋處理器的優化

happens-before原則:

1:一個執行緒的A操作總是在B之前,那多執行緒的A操作肯定實在B之前。
2:monitor 再加鎖的情況下,持有鎖的肯定先執行。
3:volatile修飾的情況下,寫先於讀發生
4:執行緒啟動在一起之前 strat
5:執行緒死亡在一切之後 end
6:執行緒操作在一切執行緒中斷之前
7:一個物件建構函式的結束都該物件的finalizer的開始之前
8:傳遞性,如果A肯定在B之前,B肯定在C之前,那A肯定是在C之前。

主記憶體:所有執行緒共享的記憶體空間

工作記憶體:每個執行緒特有的記憶體空間

==================================================================

8. 簡單說說你瞭解的類載入器。

類載入器主要分為:引導類載入器(Bootstrap ClassLoader)、擴充套件類載入器(Extension ClassLoader),系統類載入器(App ClassLoader)和自定義載入器(Custom ClassLoader)

雙親委派:雙親委派模式會保證父類載入器先載入類

==================================================================

9. 講講JAVA的反射機制。

在執行是,對於任意一個類,都能知道當前類的方法和屬性,對於任意一個類,都能呼叫類的方法和屬性,著用動態載入機制就是Java的反射機制。

==================================================================

10. 你們線上應用的JVM引數有哪些。

-XX:PermSize=128M
-XX:MaxPermSize=512m
-XX:PermSize=128M
-XX:MaxPermSize=512m
-Xms512m
-Xmx1024m
-XX:PermSize=640m
-XX:MaxPermSize=1280m
-XX:NewSize=64m
-XX:MaxNewSize=256m
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps

==================================================================

11. g1和cms區別,吞吐量優先和響應優先的垃圾收集器選擇。

CMS:併發標記清除。他的主要步驟有:初始收集,併發標記,重新標記,併發清除(刪除),重置
G1:主要步驟:初始標記,併發標記,重新標記,複製清除(整理)

CMS的缺點是對cpu的要求比較高。G1是將記憶體化成了多塊,所有對內段的大小有很大的要求

CMS是清除,所以會存在很多的記憶體碎片。G1是整理,所以碎片空間較小

吞吐量優先:G1

響應優先:CMS

==================================================================

12. 請解釋如下jvm引數的含義: -server -Xms512m -Xmx512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。

-server:伺服器模式

-Xms512m :初始堆空間

-Xmx512m:最大堆空間

-Xss1024K :棧空間

-XX:PermSize=256m :初始永久帶空間

-XX:MaxPermSize=512m :最大永久帶空間

-XX:MaxTenuringThreshold=20 :物件的生命週期

XX:CMSInitiatingOccupancyFraction=80 :老年代的記憶體在使用到70%的時候,就開始啟動CMS了

-XX:+UseCMSInitiatingOccupancyOnly:它就只會按照你設定的比率來啟動CMS GC了

相關推薦

JAVA試題總覽--JVM知識

注:JAVA面試題總覽下的所有的題目都是由群:329019348 的群主和群友于2017-03-02 整理的,我只寫上自己的答案 1. 什麼情況下會發生棧記憶體溢位。 a.方法建立了一個很大的物件,如List,Array b.是否產生了迴圈呼叫、死迴圈 c.是否引用了較

中高階 java試題總覽

JAVA 基礎 1. JAVA 中的幾種基本資料型別是什麼,各自佔用多少位元組。 資料型別 關鍵字 內建類 記憶體佔用位元組數 布林型 boolean

JAVA試題JVM+spring+分布式+並發編程+redis+網絡+設計模式!

發布 回收 靜態 系統 flow 實現負載均衡 函數 專題 高並發 此文包含 Java 面試的各個方面,史上最全,苦心整理最全Java面試題目整理包括Java基礎+JVM+算法+數據庫優化+算法數據結構+分布式+並發編程+緩存等,使用層面廣,知識量大,涉及你的知識盲點。要想

超詳細的Java試題總結(二)之Java基礎知識

多執行緒和Java虛擬機器 建立執行緒有幾種不同的方式?你喜歡哪一種?為什麼? 繼承Thread類 實現Runnable介面 應用程式可以使用Executor框架來建立執行緒池 實現Callable介面。 我更喜歡實現Runnable介面這種方法,當然這也是現

通過試題學習零散知識:170道Java試題

 一、如何看待面試題   對於喜歡學習的開發者來說,我們拋開工作和生活的時間,剩餘的時間並不多,如果都用於學習的話,也不可能學的下所有感興趣的技術點,精力也跟不上,我是深感如是。而面試題一般都是零碎的知識點,簡單的深奧的都有,並且五花八門種類繁多,每次翻看一些面試題,做一下就當是換換腦子了,每次也

Java試題--多執行緒併發&鎖&jvm

一 多執行緒、併發、鎖 執行緒的生命週期,狀態是如何轉移的 NEW:A thread that has not yet started is in this state. RUNABLE: A thread executing in the Java vi

分享知識-快樂自己:初中級 java 試題寶典

1):Jsp的重定向和轉發的流程有什麼區別   重定向是客戶端行為,轉發是伺服器端行為   重定向時伺服器產生兩次請求,轉發產生一次請求,重定向時可以轉發到專案以外的任何網址,轉發只能在當前專案裡轉發   重定向會導致request物件資訊丟失。轉發則不會   轉發的url不會變,request.ge

Java試題-基礎知識

本文來源於清英的一篇文章:你應該知道的JAVA面試題,最近自己也在面試一些候選人,發現這篇文章中的有些點我也拿不準,因此按照自己的理解整理一份參考回答。 基礎題目 1. Java執行緒的狀態 Java執行緒在某個時刻只能處於以下六個狀態中的一個。 – New(新建立),一個執行緒剛剛被創建出

超詳細的Java試題總結(一)之Java基礎知識

福利:看本文之前,推薦給大家一個阿里雲雙11活動,真的非常非常非常推薦,對於新人福利,阿里雲這次真的是下血本了,建議阿里雲新人一定一定一定不要錯過。如果覺得這單純是廣告的話(阿里雲肯找我做廣告就好了,嘿嘿),你可以直接跳過看正文。 阿里雲雙11最新活動(僅限阿

JAVA試題1:JDK、JRE、JVM關係是什麼?

JDK(Java Development Kit)即為Java開發工具包,包含編寫Java程式所必須的編譯、執行等開發工具以及JRE。開發工具如:用於編譯java程式的javac命令、用於啟動JVM執行java程式的java命令、用於生成文件的javadoc命令以及用於打包的jar命令等等。&nbs

Java試題系列】:Java基礎知識常見面試題匯總 第二篇

csdn false 2.3 als 報警器 對象創建 第一篇 extend java 文中面試題從茫茫網海中精心篩選,如有錯誤,歡迎指正! 第一篇鏈接:【Java面試題系列】:Java基礎知識常見面試題匯總 第一篇 1.JDK,JRE,JVM三者之間的聯系和區別 你

Java試題系列】:Java基礎知識常見面試題彙總 第二篇

文中面試題從茫茫網海中精心篩選,如有錯誤,歡迎指正! 第一篇連結:【Java面試題系列】:Java基礎知識常見面試題彙總 第一篇 1.JDK,JRE,JVM三者之間的聯絡和區別 你是否考慮過我們寫的xxx.java檔案被誰編譯,又被誰執行,又為什麼能夠跨平臺執行? 1.1基本概念 JVM:Java V

Java試題必備知識之ThreadLocal

老套路,先列舉下關於ThreadLocal常見的疑問,希望可以通過這篇學習筆記來解決這幾個問題: ThreadLocal是用來解決什麼問題的? 如何使用ThreadLocal? ThreadLocal的實現原理是什麼? 可否舉幾個實際專案中使用ThreadLocal的案例? 基礎知識 ThreadLo

21道最新Java試題剖析(資料庫+JVM+微服務+高併發)

前言 縱觀幾年來的Java面試題,你會發現每家都差不多。你仔細觀察就會發現,HashMap的出現機率未免也太高了吧!連考察的知識

【從刷試題到構建知識體系】Java底層-synchronized鎖-1

在技術論壇中,經常看到一種言論:面試造火箭,幹活擰螺絲。我們平時寫的大部分程式碼的確是CRDU,再提一個層次,也無非就是揉進去複雜一些的業務邏輯,把一堆的CRDU組合起來。 那麼問題來了:我們提倡的研究“底層技術”,難道僅僅是為了面試?或是為了平時碼農們聊天時裝大佬嗎? 當然不是!

【從刷試題到構建知識體系】Java底層-synchronized鎖-2偏向鎖篇

上一篇通過構建金字塔結構,來從不同的角度,由淺入深的對synchronized關鍵字做了介紹, 快速跳轉:https://www.cnblogs.com/xyang/p/11631866.html 本文將從底層實現的各個“元件”著手,詳細拆解其工作原理。 本文會分為以下4節內容:

試題JVMJava堆中對物件的建立、記憶體結構、訪問方式

  一、物件建立過程   1、檢查類是否已被載入     JVM遇到new指令時,首先會去檢查這個指令引數能否在常量池中定位到這個類的符號引用,檢查這個符號引用代表的類是否已被載入、解析、初始化,若沒有,則進行類載入   2、為新物件分配記憶體      類載入檢查後,JVM為新物件在堆記憶

Java試題和解答(三)

增加 自旋 println class 答案 logs 聯網 get link 1、這段代碼大多數情況下運行正常,但是某些情況下會出問題。什麽時候會出現什麽問題?如何修正? public class MyStack { private List<S

java試題

調用 strong 同步鎖 記錄 沒有 拋出異常 數據 sleep wait sleep()和wait()的區別  sleep是線程類的方法,它會讓出cpu去執行其他線程,當指定時間過後,會從新回到此線程上,但是雖然讓出了CPU ,並不會釋放對象鎖,   wait是obje

java試題

情況 減少 元素 pro pin 內存大小 java_opts req -xms 個人的一點參考總結,如有雷同,純屬巧合! 1、hashmap的實現原理以及hashtable的線程安全是怎麽實現的?HashMap其實也是一個線性的數組實現的,所以可以理解為其存儲數據的容