序:
本系列博客为《深入理解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)
方法区用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等。