1.jvm體系結構概覽
j**a虛擬機器所管理的記憶體包含以下幾個執行時資料區域:
1.程式計數器:是當前執行緒所執行的位元組碼的行號指示器。就是通過改變這個行號指示器的值來選取下乙個需要執行的位元組碼指令,從而可以實現迴圈、跳轉、分支、異常處理等基礎功能。j**a虛擬機器的多執行緒是通過執行緒間的輪流切換、粉配處理器執行時間來實現的,所以為了讓執行緒切換後恢復到正確的執行位置,每個執行緒的計數器是獨立的,互不影響,包括主線程。如果執行緒執行的是j**a**,計數器記錄的是位元組碼的行號,如果執行的是本地方法,計數器為空。undefined。這個區域不會報記憶體溢位異常。
2.j**a虛擬機器棧:其也是執行緒私有的,生命週期與執行緒相同,其描述的是j**a執行的執行緒記憶體模型。每個方法被執行時會建立乙個棧幀(一種資料結構),用於儲存區域性變數表、運算元棧、動態鏈結、方法出口等資訊。(其中動態鏈結是:在類載入機制中,解析步驟會把符號引用轉為直接引用,還有一部分會在執行過程中才變成直接引用,這就是動態鏈結)。棧幀的入棧到出棧就是乙個方法完整的執行過程。重點是虛擬機器棧中的區域性變數表,其存放的是基本資料型別、物件引用、returnaddress型別(一條位元組碼的位址)。當執行緒請求的棧的深度大於虛擬機器允許的深度,會報stackoverflowerror。當棧拓展時無法申請到足夠的記憶體會報outofmemoryerror。
3.本地方法棧:其與j**a虛擬機器棧作用相似,只是j**a虛擬機器棧為j**a方法服務,而本地方法棧為本地方法服務。也有上面兩種異常。
5.方法區:與j**a堆一樣,是執行緒共享的記憶體區域。用於儲存已被虛擬機器載入的型別資訊、常量、靜態變數、即時編譯器編譯後的**快取等資料。如果方法區無法滿足記憶體分配需求,將會報outofmemoryerror異常。
虛擬機器學習筆記!
安裝虛擬機器前些日子就有些接觸。裝過兩次。可是對於本質和原理還是不清楚,今天又安裝了一次。哎。就和愛因斯坦做的小椅子一樣。雖然還是不懂,可是比上一次強了一些。對於裡面的硬碟分割槽,bios設定,授權模式,網路連線等一些細節問題還是只知其一,不知其二的。安裝好的虛擬機器能否再進行設定,如果硬碟不夠用了...
VMware Ubuntu虛擬機器學習筆記(一)
1.root密碼的設定 1 命令 sudo passwd root 2 輸入兩遍新的密碼 3 命令 su root 輸入密碼 切入root使用者 4 命令 exit 退出root使用者 2.ubuntu的更新 1 命令 sudo apt get update 更新資源 2 命令 sudo apt g...
JVM虛擬機器的學習筆記六(可達性分析)
這個演算法的基本思路就是通過一系列稱為 gc roots 的根物件作為起始節點集,從這些節點開始,根據引用關係向下搜尋,搜尋過程所走過的路徑稱為 引用鏈 reference chain 如果某個物件到gc roots間沒有任何引用鏈相連,或者用圖論的話來說就是從gc roots到這個物件不可達時,則...