jvm学习笔记(一)
jvm學(xué)習(xí)筆記(一)
文章目錄
- jvm學(xué)習(xí)筆記(一)
- 1.全部筆記鏈接
- 3.類加載器
- 作用
- 類別
- 加載步驟
- 獲得類加載器
- 4.雙親委派機(jī)制
- 5.沙箱安全機(jī)制
- 沙箱概念
- JAVA沙箱的基本組件
- 基本組件的作用
- 6.JAVA安全模型
- 沙箱在JAVA安全模型中的應(yīng)用
- 域的概念
- 臨時(shí)擴(kuò)大訪問權(quán)限
- 臨時(shí)擴(kuò)大訪問權(quán)限
1.全部筆記鏈接
JVM學(xué)習(xí)筆記(一)
JVM學(xué)習(xí)筆記(二)
JVM學(xué)習(xí)筆記(三)
JVM學(xué)習(xí)筆記(四)
(待更新…)
3.類加載器
作用
加載.Class文件
類別
- 虛擬機(jī)自帶的加載器
- 啟動(dòng)類(根)加載器 rt.jar
- 擴(kuò)展類加載器 ExtClassLoader
- 應(yīng)用程序(系統(tǒng)類)加載器 AppClassLoader
- 自定義加載器
- User ClassLoader
加載步驟
使用雙親委派機(jī)制對(duì)類進(jìn)行加載。
獲得類加載器
實(shí)例----->getClass()----->Class模板----->getClassLoader()----->應(yīng)用程序加載器----->getParent()----->擴(kuò)展類加載器----->getParent()----->null(后面的加載器無法直接獲取)
4.雙親委派機(jī)制
向上委托APP–>EXT–>BOOT(無User ClassLoader)
向下加載BOOT–>EXT–>APP
加載過程:
5.沙箱安全機(jī)制
參考:
https://www.cnblogs.com/MyStringIsNotNull/p/8268351.html
https://developer.ibm.com/zh/articles/j-lo-javasecurity/
沙箱概念
Java安全模型的核心就是Java沙箱(sandbox),沙箱是一個(gè)限制程序運(yùn)行的環(huán)境。沙箱機(jī)制就是將 Java 代碼限定在虛擬機(jī)(JVM)特定的運(yùn)行范圍中,并且嚴(yán)格限制代碼對(duì)本地系統(tǒng)資源訪問,通過這樣的措施來保證對(duì)代碼的有效隔離,防止對(duì)本地系統(tǒng)造成破壞。沙箱主要限制系統(tǒng)資源訪問——CPU、內(nèi)存、文件系統(tǒng)、網(wǎng)絡(luò)。不同級(jí)別的沙箱對(duì)這些資源訪問的限制也可以不一樣。
JAVA沙箱的基本組件
- 字節(jié)碼校驗(yàn)器(bytecode verifier)
- 類裝載器(class loader)
- 存取控制器(access controller)
- 安全管理器(security manager)
- 安全軟件包(security package)
基本組件的作用
-
字節(jié)碼校驗(yàn)器(bytecode verifier):確保Java類文件遵循Java語言規(guī)范。但核心類不會(huì)進(jìn)行檢驗(yàn)(因?yàn)楹诵念惒粫?huì)出現(xiàn)語言規(guī)范錯(cuò)誤)。
-
類裝載器(class loader):使用雙親委派機(jī)制進(jìn)行類的加載, 從最內(nèi)層JVM自帶類加載器開始加載,外層惡意同名類得不到加載從而無法使用。(防止惡意覆蓋或干涉java核心代碼)
-
存取控制器(access controller):存取控制器可以控制核心API對(duì)操作系統(tǒng)的存取權(quán)限,而這個(gè)控制的策略設(shè)定,可以由用戶指定。
-
安全管理器(security manager):是核心API和操作系統(tǒng)之間的主要接口。實(shí)現(xiàn)權(quán)限控制,比存取控制器優(yōu)先級(jí)高。
-
安全軟件包(security package):java.security下的類和擴(kuò)展包下的類,允許用戶為自己的應(yīng)用增加新的安全特性,包括:
- 安全提供者
- 消息摘要
- 數(shù)字簽名
- 加密
- 鑒別
6.JAVA安全模型
該模型為jdk 1.0下的安全模型,其他java安全模型,請(qǐng)到鏈接:https://developer.ibm.com/zh/articles/j-lo-javasecurity/
沙箱在JAVA安全模型中的應(yīng)用
在 Java 中將執(zhí)行程序分成本地和遠(yuǎn)程兩種,本地代碼默認(rèn)視為可信任的,而遠(yuǎn)程代碼則被看作是不受信的。對(duì)于授信的本地代碼,可以訪問一切本地資源。而對(duì)于非授信的遠(yuǎn)程代碼在早期的 Java 實(shí)現(xiàn)中,安全依賴于沙箱 (Sandbox) 機(jī)制。沙箱機(jī)制就是將 Java 代碼限定在虛擬機(jī) (JVM) 特定的運(yùn)行范圍中,并且嚴(yán)格限制代碼對(duì)本地系統(tǒng)的資源訪問,通過這樣的措施來保證對(duì)遠(yuǎn)程代碼的有效隔離,防止對(duì)本地系統(tǒng)造成破壞。
該模型為jdk 1.2下的安全模型,其他更早的java安全模型,請(qǐng)到鏈接:https://developer.ibm.com/zh/articles/j-lo-javasecurity/
在 Java1.2 版本中,再次改進(jìn)了安全機(jī)制,增加了代碼簽名。不論本地代碼或是遠(yuǎn)程代碼,都會(huì)按照用戶的安全策略設(shè)定,由類加載器加載到虛擬機(jī)中權(quán)限不同的運(yùn)行空間,來實(shí)現(xiàn)差異化的代碼執(zhí)行權(quán)限控制。
該模型為jdk 1.6下的安全模型,其他更早的java安全模型,請(qǐng)到鏈接:https://developer.ibm.com/zh/articles/j-lo-javasecurity/
域的概念
當(dāng)前最新的安全機(jī)制實(shí)現(xiàn),則引入了域 (Domain) 的概念。虛擬機(jī)會(huì)把所有代碼加載到不同的系統(tǒng)域和應(yīng)用域,系統(tǒng)域部分專門負(fù)責(zé)與關(guān)鍵資源進(jìn)行交互,而各個(gè)應(yīng)用域部分則通過系統(tǒng)域的部分代理來對(duì)各種需要的資源進(jìn)行訪問。虛擬機(jī)中不同的受保護(hù)域 (Protected Domain),對(duì)應(yīng)不一樣的權(quán)限 (Permission)。存在于不同域中的類文件就具有了當(dāng)前域的全部權(quán)限。
臨時(shí)擴(kuò)大訪問權(quán)限
部分代理來對(duì)各種需要的資源進(jìn)行訪問。虛擬機(jī)中不同的受保護(hù)域 (Protected Domain),對(duì)應(yīng)不一樣的權(quán)限 (Permission)。存在于不同域中的類文件就具有了當(dāng)前域的全部權(quán)限。
臨時(shí)擴(kuò)大訪問權(quán)限
在應(yīng)用開發(fā)中還有一些關(guān)于安全的復(fù)雜用法,其中最常用到的 API 就是 doPrivileged。doPrivileged 方法能夠使一段受信任代碼獲得更大的權(quán)限,甚至比調(diào)用它的應(yīng)用程序還要多,可做到臨時(shí)訪問更多的資源。有時(shí)候這是非常必要的,可以應(yīng)付一些特殊的應(yīng)用場(chǎng)景。例如,應(yīng)用程序可能無法直接訪問某些系統(tǒng)資源,但這樣的應(yīng)用程序必須得到這些資源才能夠完成功能。針對(duì)這種情況,Java SDK 給域提供了 doPrivileged 方法,讓程序突破當(dāng)前域權(quán)限限制,臨時(shí)擴(kuò)大訪問權(quán)限。
總結(jié)
以上是生活随笔為你收集整理的jvm学习笔记(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑横机安装电力要求以及如何连接地线电脑
- 下一篇: WIFI路由器怎么限制不让人联网link