序:
本系列博客爲《深入理解Java虛擬機:JVM高級特性與最佳實踐 第2版》的讀書筆記。博客中儘可能不用書中原話,而用自己的話來敘述和解釋。實爲自用。如有幸幫助到別人,也是一件好事。
1.1 運行時數據區域
1.1.1 程序計數器(program counter register)
程序計數器用於標記當前線程運行到該程序的行號。佔用空間小。在Java的線程切換中,能讓該線程找到程序執行位置。即每個線程有自己的程序計數器。
如線程在運行Java方法,程序計數器記錄正在執行的虛擬機字節碼指令的地址;如正在運行Native方法,該計數器值爲空。
1.1.2 Java虛擬機棧(Java virtual machine stacks)
虛擬機棧用於存儲Java方法執行時的局部變量表,操作數棧,動態鏈接,方法出口等信息。每個線程有一個虛擬機棧,生命週期相同。線程使用的,用於服務方法的棧。
局部變量表:存放基本數據類型(boolean, byte, char, short, int...),對象引用,returnAdd類型。
1.1.3 本地方法棧(native method stack)
與虛擬機棧類似,存放虛擬機使用的Native方法。
1.1.4 Java堆(Java heap)
Java堆(GC堆 Garbage Collected Heap)用於存放對象實例,數組。邏輯連續,物理空間不連續。在虛擬機啓動時創建,被所有線程共享。Java程序的核心大內存。
1.1.5 方法區(method area)
方法區用於存儲已被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯後的代碼等。