摘要: 原創出處 https://peijie-sh.github.io 歡迎轉載,保留摘要,謝謝!git
Heap
new
建立的對象實例和數組。JVM
(Java虛擬機)本身管理。當使用new建立對象時,沒必要指定分配空間的大小,JVM
會動態自動分配一塊區域;在程序執行過程當中,沒有指向此對象的引用時,此對象就被標記爲可被回收狀態,將由GC
(垃圾回收器)在一個不肯定的時間自動回收,釋放所佔的內存空間。新生代
和老年代
,更細緻可劃分爲:Eden空間
,From Survivor空間
,To Survivor空間
。VM Stack
Native Method Stack
虛擬機棧
相似,虛擬機棧
爲虛擬機調用Java方法服務,本地方法棧
爲虛擬機調用Native方法服務。虛擬機棧
和本地方法棧
被合併爲一個區域。Program Counter Register
一塊較小的內存空間,可看做是當前線程所執行的字節碼的 行號指示器。github
經過改變計數器的值來選取下一條須要執行的字節碼指令。(分支、循環、跳轉、異常處理、線程恢復等)基礎功能都依賴與其完成。算法
特色:數組
Method Area
Runtime Constant Pool
Direct Memory
直接內存不是虛擬機運行時數據區的一部分,也不是Java虛擬機規範中定義的內存區域。 可是這部份內存也被頻繁地使用,並且也可能致使OutOfMemoryError異常出現。多線程
在JDK 1.4中新加入了NIO(New Input/Output)類,引入了一種基於通道(Channel)與緩 衝區(Buffer)的I/O方式,它可使用Native函數庫直接分配堆外內存,而後經過一個存儲 在Java堆中的DirectByteBuffer對象做爲這塊內存的引用進行操做。這樣能在一些場景中顯著 提升性能,由於避免了在Java堆和Native堆中來回複製數據。函數