JVM+GC(1)

JVM內存結構

在這裏插入圖片描述

  1. 方法區:
    1. 存儲運行時常量池,虛擬機所加載的類信息(版本字段方法接口),常量,靜態變量,編譯後代碼
    2. innern()可以將堆中new的實例的常量放在常量池
    3. 方法區
    4. 垃圾回收在方法區的行爲
    5. 異常定義
  2. 堆:
    存儲對象的實例
    垃圾回收的主要區域
  3. 程序計數器:
    比較小的內存空間
    處於線程獨佔區
    如果線程執行的是Java方法,計數器記錄的是字節碼指令地址
    沒有內存溢出的情況
    GOTo切換到某一行,保留字
  4. 虛擬機棧:
    存放方法運行時數據,存的棧幀
    每個方法執行都會創建一個棧幀,存儲局部變量表(存放各種基本數據類型,引用類型,returnaddress類型。內存空間在編譯期完成分配,當進入一個方法是,這個方法分配多少內存是固定的,方法運行期間不會改變局部變量大小),操作數棧,動態鏈接,方法出口
    棧的大小
    爲虛擬機執行Java方法服務
  5. 本地方法棧:
    爲虛擬機執行native方法服務
  6. 直接內存:
    jdk1.4彌補IO 的一宗NIO ,分配堆外內存
  7. 棧上分配:
    根據逃逸分析,分析對象作用域
JVM垃圾回收
  • 什麼是垃圾:內存中不再使用的對象

  • 如何判斷對象是否應該被回收?

    • 引用計數法(一般不採用)

    • 可達性分析法(一定要從GCRoot開始)

      • 可以作爲GCroot的對象
      • 虛擬機棧中的
      • 方法去中的靜態屬性引用的對象
      • 方法區中常量引用的對象
      • 本地方法棧中JNI引用的對象
    JVM 垃圾回收算法

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章