深入理解Java虛擬機器一 閱讀筆記
xl_echo編輯整理。歡迎新增echo微信(微訊號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!
以下內容摘抄自《深入理解Java虛擬機器_JVM高階特性與最佳實踐 第2版_220》,博主完全尊重書籍原創,只是學習筆記摘抄部分,由於不是原創,不支援轉載。如有侵權請聯絡博主(微訊號:t2421499075)。
Java能夠被廣泛認可的優點:
- 結構嚴謹
- 面向物件程式設計的思想
- 跨平臺的便利
- 獨特的記憶體管理機制
- 開源庫的支援
Java的“不惑境界”
當我們使用一種技術的時候,如果不在依賴書本和他人就能得到這些問題的答案,那麼就是達到了不惑的境界
Java技術體系包含以下幾個組成部分
- Java程式設計語言
- 各種硬體平臺上的Java虛擬機器
- Class檔案格式
- Java API類庫
- 來自商業機構和開源社群的第三方Java類庫
JDK
Java程式設計語言、Java虛擬機器、JavaAPI類庫這三部分統稱為JDK
JRE
Java API類庫中的Java SE API子集和Java虛擬機器這兩部分統稱為JRE
執行時資料區域主要分為以下幾塊
- 方法區
- 虛擬機器棧一
- 本地方法棧
- 堆
- 程式計數器
- 執行引擎
- 本地庫介面
- 本地方法庫
程式計數器
程式計數器是一塊很小的記憶體空間,它可以看做是當前執行緒執行的位元組碼的行號指示器。
Java虛擬機器棧
和程式計數器一樣,Java虛擬機器棧也是執行緒私有的,它的生命週期與執行緒相同。
本地方法棧
本地方法棧與虛擬機器棧鎖發揮的作用是非常相似的,他們之間的區別不過是虛擬機器棧為虛擬機器執行Java方法服務
Java堆
對於大多數應用來說,Java堆是Java虛擬機器所屬管理的記憶體中最大的一塊,同時和棧關係最為緊密。Java堆是被所有執行緒共享的一塊記憶體區域,在虛擬機器啟動的時候建立。
方法區
方法區與Java堆一樣,是各個執行緒共享的記憶體區域,它用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯後的程式碼等資料。
執行時常量池
執行時常量池是方法區的一部分。Class檔案中除了有類的版本、欄位、方法、介面等描述資訊外,還有一項資訊是常量池,用於存放編譯期生成的各種字面和符號引用,這部分內容將在類載入後進入方法區的執行時常量池中存放。
直接記憶體
直接記憶體並不是虛擬機器執行時資料區的一部分,也不是Java虛擬機器規範中定義的記憶體區域。但是這一部分記憶體也被頻繁的使用,而且也可能導致OutOfMemor