目錄
- Java類加載過程
- 類加載器流程中的各加載器說明
- ClassLoader類的常用方法
- JVM記憶體模型總覽
- JVM垃圾回收算法
-
- Minor GC
- Major GC
- Full GC
Java類加載過程
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9EFVPFzZq10MBRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0cDO4MjNyMjM0EDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
類加載器流程中的各加載器說明
- 引導類加載器(Bootstrap ClassLoader):它用來加載 Java 的核心庫,是用原生代碼來實作的,并不繼承自 java.lang.ClassLoader。
- 擴充類加載器(Extension ClassLoader):它用來加載 Java 的擴充庫。Java 虛拟機的實作會提供一個擴充庫目錄。該類加載器在此目錄裡面查找并加載 Java 類。
- 應用程式類加載器(Application ClassLoader):它根據 Java 應用的類路徑(CLASSPATH)來加載 Java 類。一般來說,Java 應用的類都是由它來完成加載的。可以通過 ClassLoader.getSystemClassLoader()來擷取它。
- 使用者自定義加載器(User ClassLoader): 開發人員可以通過繼承 java.lang.ClassLoader類的方式實作自己的類加載器,以滿足一些特殊的需求。
ClassLoader類的常用方法
- getParent() 傳回該類加載器的父類加載器。
- loadClass(String name) 加載名稱為 name的類,傳回的結果是 java.lang.Class類的執行個體。
- findClass(String name) 查找名稱為 name的類,傳回的結果是 java.lang.Class類的執行個體。
- findLoadedClass(String name) 查找名稱為 name的已經被加載過的類,傳回的結果是 java.lang.Class類的執行個體。
- defineClass(String name, byte[] b, int off, int len) 把位元組數組 b中的内容轉換成 Java 類,傳回的結果是 java.lang.Class類的執行個體。這個方法被聲明為 final的。
- resolveClass(Class<?> c) 連結指定的 Java 類。
JVM記憶體模型總覽
JVM垃圾回收算法
Minor GC
- 從年輕代空間(包括 Eden 和 Survivor 區域)回收記憶體被稱為 Minor GC
Major GC
- Major GC 是清理永久代。
Full GC
- 清理整個堆空間—包括年輕代和永久代