>[warning] java程序運行在虛擬機上
## JVM所處的位置

## JDK、JRE和JVM三者之間關系
* jvm:Java虛擬機-(負責執行符合規范的Class文件)
* jre: 運行時環境-(包含jvm和類庫)
* jdk:java開發工具包-(包含jre和開發工具包)

## Class字節碼
編譯后被Java虛擬機所執行的代碼使用了一種平臺中立(不依賴于特定硬件及操作系統的)的二進制格式來表示,并且經常(但并非絕對)以文件的形式存儲,因此這種格式被稱為Class文件格式。Class文件格式中精確地定義了類與接口的表示形式.

## ava虛擬機的體系結構

1. 類裝載子系統.
2. 運行引擎.負責執行包含在已裝載的類或接口中的指令.
3. 運行數據區域.方法區、Java堆、Java虛擬機棧、PC寄存器、本地方法棧,還有常量池
## 運行數據區域
### 線程共享數據區
包括:Java堆、方法區。它們會隨著虛擬機啟動而創建,隨著虛擬機退出而銷毀。
#### 1.Java堆
Java堆主要用來為類實例對象分配內存。
[詳細了解](http://blog.csdn.net/ljheee/article/details/52196455)
#### 2.方法區(靜態區)
存儲運行時常量池,類(即時編譯器編譯后的行為代碼+靜態變量)
### 線程私有數據區
### 3.java棧
描述Java方法(函數)執行的內存模型.
棧幀:局部變量表、操作數棧、動態鏈接、方法出口
>[info] 局部變量表所需的內存空間大小在編譯期間完成分配。
#### 4.本地方法棧
用于支持native方法的運行內存模型。(native方法,比如用C/C++實現的代碼)
#### 程序計數器
記錄當前線程所執行到的字節碼的行號.