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