浅谈JVM(一) ClassLoader的双亲委派和沙箱机制
轉載自?https://blog.csdn.net/start_lie/article/details/79016312
JVM(Java Virtual Machine)? ?java虛擬機?
JVM運行在操作系統(tǒng)之上,與計算機硬件沒有交互
JVM整體運行流程需要用到的資源 可以說分以下標紅的5部分組成
class files?被java命令運行 將類信息通過類裝載器(ClassLoader)加載并初始化生成 Class模版放入運行時數(shù)據(jù)區(qū)(Runtime Data Area)
運行時數(shù)據(jù)區(qū)包括 5部分 : 方法區(qū) 和 堆(線程公有)? ?java棧和本地方法棧和程序計數(shù)器(線程私有)
執(zhí)行引擎(Execution Engine)負責從java棧中取得命令解釋成操作系統(tǒng)可識別命令,并交給操作系統(tǒng)執(zhí)行
本地接口(Native Interface)和本地方法庫? 融合了別的編程語言(C/C++)為java所用,java誕生時c和c++處于統(tǒng)治地位,
java或多或少會使用c/c++實現(xiàn)一些底層方法(native)方法,于是專門在內存中開辟了一塊區(qū)域來登記native方法,
在執(zhí)行引擎執(zhí)行時加載native libraies,目前這些方法使用越來越少了.
今天總結一部分
ClassLoader
負責加載class文件,class文件在文件開頭有特定的文件標示,并且ClassLoader只負責class文件的加載,至于它是否可以運行,則由Execution Engine決定
目前了解4種類加載器:
1.BootstrapClassLoader 啟動類加載器
這貨是用C++編寫的? ?是最頂層的類裝載器,用來加載jre/lib/rt.jar下的類
2.ExtensionClassLoader拓展類加載器
用來加載jre/lib/ext/*.jar的所有類
3.AppClassLoader 應用類加載器
應用類加載器,也叫系統(tǒng)類加載器,用來加載當前應用classpath下的所有類
4.User-Definend 用戶自定義的類加載器
繼承 java.lang.ClassLoader類實現(xiàn)里面的方法,自定義加載類的方法
雙親委派機制
雙親委派模型的式作過程是:如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每一個層次的類加載器都是如此,因此所有的加載請求最終都應該傳送到頂層的啟動類加載器中,只有當父加載器反饋自己無法完全這個加載請求時,子加載器才會嘗試自己去加載。
沙箱機制
沙箱機制是由基于雙親委派機制上 采取的一種JVM的自我保護機制,假設你要寫一個java.lang.String 的類,由于雙親委派機制的原理,此請求會先交給Bootstrap試圖進行加載,但是Bootstrap在加載類時首先通過包和類名查找rt.jar中有沒有該類,有則優(yōu)先加載rt.jar包中的類,因此就保證了java的運行機制不會被破壞.
總結
以上是生活随笔為你收集整理的浅谈JVM(一) ClassLoader的双亲委派和沙箱机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库四种设计模式
- 下一篇: Java 获取当前项目的类路径