ClassLoader的分類及加載順序

  • 2019 年 11 月 24 日
  • 筆記

1.主要分4類,見下圖橙色部分

JVM類加載器:這個模式會加載JAVA_HOME/lib下的jar包

擴展類加載器:會加載JAVA_HOME/lib/ext下的jar包

系統類加載器:這個會去加載指定了classpath參數指定的jar文件

用戶自定義類加載器:sun提供的ClassLoader是可以被繼承的,允許用戶自己實現類加載器

2.類加載器的加載順序如圖所示:

3.類加載順序

JVM並不是把所有的類一次性全部加載到JVM中的,也不是每次用到一個類的時候都去查找,對於JVM級別的類加載器在啟動時就會把默認的JAVA_HOME/lib里的class文件加載到JVM中,因為這些是系統常用的類,對於其他的第三方類,則採用用到時就去找,找到了就緩存起來的,下次再用到這個類的時候就可以直接用緩存起來的類對象了,ClassLoader之間也是有父子關係的,沒個ClassLoader都有一個父ClassLoader,在加載類時ClassLoader與其父ClassLoader的查找順序如下圖所示: