原文 http://blog.jamesdbloom.com/JVMInternals.html#jvm_system_threads
這篇文章解釋了JVM的內(nèi)部架構(gòu)瞄摊。下面的這幅圖表展示了一個(gè)Java SE 7標(biāo)準(zhǔn)下的典型JVM的關(guān)鍵組件們纽门。
下面兩個(gè)章節(jié)中會解釋上圖中的每個(gè)組件驶赏。第一個(gè)章節(jié)部分為線程相關(guān)的組件們仍稀,第二個(gè)章節(jié)為線程無關(guān)的組件們地消。
- 線程相關(guān)
- JVM系統(tǒng)線程(JVM System Threads)
- 每個(gè)線程(Per Threads)
- 程序計(jì)數(shù)器(program Counter)
- 棧(Stack)
- 本地棧(Native Stack)
- Stack Restrictions
- 棧幀(Frame)
- 本地變量數(shù)組(Local Variable Array)
- 操作數(shù)棧(Operand Stack)
- 動態(tài)鏈接(Dynamic Linking)
- 線程無關(guān)
- 堆(Heap)
- 內(nèi)存管理(Memory Management)
- 非堆內(nèi)存(Non-Heap Memory)
- JIT編譯(Just In Time Compilation)
- 方法區(qū)(Method Area)
- class文件結(jié)構(gòu)(Class File Structure)
- 類加載器(Classloader)
- 更快的類加載(Faster Class Loading)
- 方法區(qū)在哪里(Where is Method Area)
- 類加載器引用(Classloader Reference)
- 運(yùn)行時(shí)常量池(Run Time Constant Pool)
- 異常表(Exception Table)
- 符號表(Symbol Table)
- 常量化字符串(字符串表)
線程相關(guān)
線程是程序里的一個(gè)執(zhí)行單位废赞,可以說是一個(gè)執(zhí)行“原子”虎眨。JVM允許一個(gè)應(yīng)用擁有多個(gè)線程同時(shí)執(zhí)行弟劲。在HotSpot虛擬機(jī)中祷安,Java線程和本地操作系統(tǒng)線程是一一對應(yīng)的。在Java線程準(zhǔn)備就緒后(thread-local存儲兔乞,緩存分配汇鞭,對象同步,棧同步庸追,程序計(jì)數(shù)器同步)霍骄,本地操作系統(tǒng)線程就會被創(chuàng)建。