JVM體系結構

JVM體系結構

組成


計算機的組成分爲:數據、指令和控制三部分。一樣JVM在大體上也能夠如此區分爲:
數據:方法區、Heap堆
指令:程序計數器、虛擬機棧、本地方法棧。(能夠經過javap -c -v xxx.class > yyy.txt查看指令)java

  • 程序計數器:指向當前線程正在執行的字節碼指令的地址(行號)算法

  • 虛擬機棧:每一個方法在執行的時候都會建立一個對應的棧幀用於存儲局部變量表、操做棧、動態連接、方法出口等信息。方法是由線程執行的,線程只是一個執行體,因此也會存儲在虛擬機棧中。 stackoutflowerror安全

  • 本地方法棧:虛擬機使用native方法的服務jvm

  • 方法區:用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。(class文件等)線程

  • 堆(heap):java虛擬機中所管理的內存中最大的一塊,全部線程共享的一塊內存區域,在虛擬機啓動時建立。此內存區域的惟一目的是存放對象實例,幾乎全部的對象實例都在這裏分配內存。outofmemorryerror3d

概覽

java gc 主要回收的是 方法區 和 堆中的內容對象

類加載器

  • 類加載器是什麼(1,Custom ClassLoader 2,App ClassLoader 3,Extension ClassLoader 4,Bootstrap ClassLoader)
  • 雙親委派機制(1,自底向上檢查類是否已經加載;2,自頂向下嘗試加載類)
  • Java類加載的沙箱安全機制

常見的垃圾回收算法

  • 引用計數

在雙端循環,互相引用的時候,容易報錯,目前不多使用這種方式了blog

  • 複製

複製算法在年輕代的時候,進行使用,複製時候有交換內存

優勢:沒有產生內存碎片編譯器

  • 標記清除

先標記,後清除,缺點是會產生內存碎片,用於老年代多一些

  • 標記整理

標記清除整理

可是須要付出代價,由於移動對象須要成本

相關文章
相關標籤/搜索