天天看點

1.jvm概述與基本概念

文章目錄

  • ​​部落格概述​​
  • ​​虛拟機的原理​​
  • ​​java虛拟機的基本結構​​
  • ​​類加載子系統​​
  • ​​方法區​​
  • ​​java堆​​
  • ​​直接記憶體​​
  • ​​java棧​​
  • ​​本地方法棧​​
  • ​​垃圾收集系統​​
  • ​​PC寄存器​​
  • ​​執行引擎​​

部落格概述

在這一部分,會講解虛拟機的一些基本的概念,算是一個入門。針對jdk1.7。

虛拟機的原理

所謂虛拟機,就是一台虛拟的機器。它是一款軟體,用來執行一系列虛拟的計算機指令,大體上虛拟機可以分為系統虛拟機和程式虛拟機,大名鼎鼎的visual box,vmware就屬于系統虛拟機,他們完全是對實體計算機的仿真,提供了一個可運作完整作業系統的軟體平台。程式虛拟機典型代表就是java虛拟機,他專門為執行單個計算機程式而設計,在java虛拟機中執行的指令我們稱為java位元組碼指令。無論是系統虛拟機還是程式虛拟機,在上面運作的軟體都被限制于虛拟機提供的資源中(這就是為啥有後面的虛拟機調優)。java發展至今出現了很多虛拟機,最初sun使用的一款叫做classic的java虛拟機,到現在應用最廣泛的是hotspot虛拟機,除了sun以外,還有BEA的JRockit,目前JRockit和hotspot都被oracle收入旗下,大有整合的趨勢。我們接觸的就是程式虛拟機。

java虛拟機的基本結構

由9部分組成,想要高薪必須準确堆知道每個部分的作用。

  1. 類加載子系統
  2. 方法區
  3. java堆
  4. 直接記憶體
  5. java棧
  6. 本地方法棧
  7. 垃圾回收系統
  8. PC寄存器
  9. 執行引擎

類加載子系統

負責從檔案系統或者網絡中加載Class資訊,加載的資訊存放在一塊稱之為方法區的記憶體空間。

方法區

存放類資訊,常量資訊,常量池資訊,包括字元串字面量和數字常量。

java堆

在java虛拟機啟動的時候建立java堆,它是java程式最主要的記憶體工作區域,幾乎所有的對象執行個體都存放在java堆中,堆空間是所有線程共享的。

直接記憶體

java的nio庫允許java程式使用直接記憶體,進而提高性能。通常直接記憶體的速度會優于java堆。讀寫頻繁的場合會考慮使用。

java棧

每個虛拟機線程都有一個私有的棧,一個線程的java棧線上程被建立的時候被建立,java棧中儲存着局部變量,方法參數,同時java的方法調用(遞歸導緻棧溢出),傳回值等。

本地方法棧

它與java棧非常類似,最大的不同是本地方法棧用于本地方法的調用。java虛拟機允許java直接調用本地方法,通常用c編寫本地方法(聯系android的jni)。

垃圾收集系統

垃圾收集系統是java的核心,也是必不可少的,java有一套自己的垃圾回收機制,開發人員無需手工清理(對比c語言和c++)。

PC寄存器

執行引擎