[TOC]
<br/>
> ### `JVM`運行時數據區
* **程序計數器**`PC`
* 線程私有,是一塊很小的內存區域,存儲了下一條需要執行的(JVM匯編)字節碼的指令地址.每個線程都有自己的PC,記錄了當前線程要執行的指令。
* **虛擬機棧**`VM Stack`
* 線程私有,此棧中的元素叫做棧幀,線程在調用java方法時會為每一個元素創建一個棧幀,來存儲**局部變量表,操作表,動態鏈接,方法出口**等信息
* 每個方法被調用和完成的過程,都對應一個棧幀從虛擬機棧上的入棧和出棧的過程。虛擬機棧的生命周期和虛擬機相同。
* 后入先出棧,線程調用對象方法時,JVM會創建一個棧幀放到虛擬機棧中,用來表示某個方法的調用,調用過程就是方法的入棧和出棧過程。
* **本地方法棧**`Native Method Stack`
* 線程私有,功能和虛擬機棧相似,存儲線程調用本地方法時,本地放法的局部變量表,操作棧等。
* **堆** `Heap`
* Heap區被所有的線程共享,在虛擬機啟動時創建。
* 存放對象實例,Heap區是垃圾回收管理的主要區域
* **方法區**`Method area`
* 被所有線程共享,用于存儲已經被虛擬機加載的**類信息,常量,靜態變量**,即時編譯器編譯出來的代碼等數據。
* 
<br/>
* 
<br/>
> ### 對象的創建
* 當`JVM`遇到一條`new`指令,首先檢查這個指令的參數能否在常量池中定位到一個類的符號引用,并且檢查這個符號引用代表的類是否已被加載、解析和初始化過。若沒有,則先執行類的初始化過程。
* 類加載檢查通過后,`JVM`為新生對象分配內存,對象所需內存大小在類加載完成后便可確定。分配內存有兩種方式:
* 指針碰撞,Java堆中內存是規整的
* 空閑列表,內存不規整,內存規整與否由垃圾收集器決定,CMS收集器是標記清除算法,內存不規整,所以采用空閑列表
* 內存分配完成后,`JVM`將舒適化的內存空間設置零值
* 設置對象頭,如對象指向哪個類、類的元數據信息、對象的Hash碼、對象的GC分代年齡、偏向鎖等信息
* 執行對象的構造函數
<br/>
> ### 類加載

- asD
- Java
- Java基礎
- Java編譯器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞隊列
- java語法
- String.format()
- JVM
- JVM內存、對象、類
- JVM GC
- JVM監控
- 多線程
- 基礎概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 線程池
- Spring
- IOC
- 特性介紹
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring處理請求的過程
- 注解
- 微服務
- 服務注冊與發現
- etcd
- zk
- 大數據
- Java_spark
- 基礎知識
- Thrift
- hdfs
- 計算機網絡
- OSI七層模型
- HTTP
- SSL
- 數據庫
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 數據結構/算法
- 排序算法
- 快排
- 插入排序
- 歸并排序
- 堆排序
- 計算時間復雜度
- leetcode
- LRU緩存
- B/B+ 樹
- 跳躍表
- 設計模式
- 單例模式
- 裝飾者模式
- 工廠模式
- 運維
- git
- 前端
- thymeleaf
- 其他
- 代碼規范
- work_project
- Interview