原文 http://blog.jamesdbloom.com/JVMInternals.html#jvm_system_threads
这篇文章解释了JVM的内部架构。下面的这幅图表展示了一个Java SE 7标准下的典型JVM的关键组件们。
下面两个章节中会解释上图中的每个组件。第一个章节部分为线程相关的组件们,第二个章节为线程无关的组件们。
- 线程相关
- JVM系统线程(JVM System Threads)
- 每个线程(Per Threads)
- 程序计数器(program Counter)
- 栈(Stack)
- 本地栈(Native Stack)
- Stack Restrictions
- 栈帧(Frame)
- 本地变量数组(Local Variable Array)
- 操作数栈(Operand Stack)
- 动态链接(Dynamic Linking)
- 线程无关
- 堆(Heap)
- 内存管理(Memory Management)
- 非堆内存(Non-Heap Memory)
- JIT编译(Just In Time Compilation)
- 方法区(Method Area)
- class文件结构(Class File Structure)
- 类加载器(Classloader)
- 更快的类加载(Faster Class Loading)
- 方法区在哪里(Where is Method Area)
- 类加载器引用(Classloader Reference)
- 运行时常量池(Run Time Constant Pool)
- 异常表(Exception Table)
- 符号表(Symbol Table)
- 常量化字符串(字符串表)
线程相关
线程是程序里的一个执行单位,可以说是一个执行“原子”。JVM允许一个应用拥有多个线程同时执行。在HotSpot虚拟机中,Java线程和本地操作系统线程是一一对应的。在Java线程准备就绪后(thread-local存储,缓存分配,对象同步,栈同步,程序计数器同步),本地操作系统线程就会被创建。