java中gc的认识,java JVM GC 笔记(个人对GC 或JVM 的了解)
JVM 是在操作系統上的一個平臺,與操作系統間有個裝換器,將字節碼文件轉換成對應平臺的機器碼,字節碼文件從編譯器編譯.java文件產生。
JVM的結構 棧(存放的就是方法的引用,局部變量,方法體)、堆(常量,方法的實例)、方法區(常量池、靜態方法區)、程序計數器、本地方方法棧(不受虛擬機限制的本地方法棧區)
有一張圖挺詳細的
https://blog.csdn.net/Marvel__Dead/article/details/69220153?locationNum=5&fps=1
用戶編寫的java文件通過jvm的類加載器加載進內存
編譯優化的技術
方法內聯,去除方法調用成本,
冗余訪問消除
復寫傳播
無用代碼消除
公共子表達式消除,沒必要重復計算公共子表達式的值
數組邊界檢查消除
逃逸分析,分析對象的動態作用域,一個對象定以后,被外部方法調用,稱為方法逃逸,被其他線程訪問到,稱為線程逃逸 棧上分配 同步消除 標量替換
類加載器:
bootstrap(根類加載器)加載JVM自身類
extension(擴展類加載器)加載lib下的jar包
system(系統類加載器)加載用戶編寫的java文件
JVM加載類是按需加載 使用雙親委派模式
雙親委派模式:
當某個類加載器收到類加載的請求時不會自己直接加載 而是先去找父類加載器 當父類加載器還有父類時一直向上請求 直到根節點根類加載器;然后向下返回 當父類加載器能加載時 成功返回,不能加載就交由子類嘗試加載
類加載機制 : 加載 驗證 準備 解析 初始化 運行 狗帶
GC
JVMGC
GC主要發生在堆內存中 現在采用為分代回收
判斷對象是否是要回收的對象有可達性分析 和引用計數等
引用計數:新增一個引用計數+1 引用被釋放計數-1當計數為0則代表對象可回收 (此方法過時)
可達性分析:從GC Root開始 當一個對象和GC Root沒有間接或者直接的引用鏈時(么有直接或者間接的引用關系) 該對象不可用
GC Root包括:1、虛擬機棧中引用的對象。2、方法區中類靜態屬性實體引用的對象。3、方法區中常量引用的對象。4、 本地方法棧中JNI引用的對象。
分代回收:JVM中分為3個大區 年輕代 老年代 永久代(堆外內存)而大區中又有小區 所有的新生對象都是放在年輕代中 當區塊中滿了時會將還存存活的對象(沒有被GC掉的)移到下個區塊
總結
以上是生活随笔為你收集整理的java中gc的认识,java JVM GC 笔记(个人对GC 或JVM 的了解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php stripos 返回值,php函
- 下一篇: java libpcap,Linux下编