面試之什麼是java虛擬機

java虛擬機體系結構 方法區 堆 java虛擬機棧 本地方法棧
方法區 java虛擬機編譯的class文件中二進制數據類型解析數據存在方法區中 是全部線程共享
和存在數據的線程安全問題 當二個線程使用同一類而且類還被加載 則讓一個線程加載 另外一個
線程等待
java虛擬機棧 是線程私有的 既決定了線程的個數 存放的變量 對象引用
堆 是全部線程所共享 存放的是全部的對象 涉及到多線程的併發 對象的引用 直接引用 使用句柄引用
直接內存不是java虛擬機的一部分 加快GC的垃圾回收 但直接內存出現內存溢出還難排除
java虛擬機的加載機制 雙親委派模式 根類加載器 擴展類加載器 應用類加載器 分支 用戶自定義加載器 擴展類加載器 應用類加載器會先加載jdk的源碼包 而後是用戶自定義的包 好比java.lang.String自定義的類永遠不會被加載
gc的垃圾收集算法
1.引用計數算法 肯定不能處理循環引用的對象
2.標記清除算法 先將須要清除的標記出來而後進行清除 會產生不少的內存碎片
3.複製算法 先將內存分爲2半 將須要清除的放入另外一半中 浪費空間
4.標記整理算法 是結合了標記清除和複製算法的各自的優勢 先將須要清除的標記而且整理在一旁
既不會浪費內存也不會產生內存碎片
5.分代收集算法 根據對象的不一樣生命週期採用不一樣的算法
相關文章
相關標籤/搜索