1. 程式人生 > >深入理解Java虛擬機器一 閱讀筆記

深入理解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