程序计数器(Program Counter Register)
它是一块较小的内存空间,它的作用可以卡诺是当前线程锁执行的字节码的行号指示器。
Java虚拟机的多线程是通过线程轮流切换并分配处理时间的方式来实现的,任何一个确定的时刻一个处理器只会执行一条线程中的指令,因此,为了在切换线程后能恢复道正常的执行位置,每条线程都是需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。
Java虚拟机栈
Java虚拟机栈也是线程私有的,它的生命周期和线程相同。
虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用就对应着一个栈帧在虚拟机中从入栈到出栈的过程。
Java的内存可以粗略的分为对内存和栈内存。其中栈就是所说的上面的Java虚拟机栈,或者说是虚拟机中的局部变量表部分。
局部变量表中存放是的Java中的基础类型和对象引用以及returnAddress类型。
Java堆
Java堆是被所有线程共享的一块内存区域,是Java虚拟机启动的时候创建的,它唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
方法区
它是用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,它也是线程共享的。
例如:
Object obj = new Object();
它是一块较小的内存空间,它的作用可以卡诺是当前线程锁执行的字节码的行号指示器。
Java虚拟机的多线程是通过线程轮流切换并分配处理时间的方式来实现的,任何一个确定的时刻一个处理器只会执行一条线程中的指令,因此,为了在切换线程后能恢复道正常的执行位置,每条线程都是需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。
Java虚拟机栈
Java虚拟机栈也是线程私有的,它的生命周期和线程相同。
虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用就对应着一个栈帧在虚拟机中从入栈到出栈的过程。
Java的内存可以粗略的分为对内存和栈内存。其中栈就是所说的上面的Java虚拟机栈,或者说是虚拟机中的局部变量表部分。
局部变量表中存放是的Java中的基础类型和对象引用以及returnAddress类型。
Java堆
Java堆是被所有线程共享的一块内存区域,是Java虚拟机启动的时候创建的,它唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
方法区
它是用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,它也是线程共享的。
例如:
Object obj = new Object();
该语句中的“Object obj”这部分的语句将反应到Java栈的本地变量表中,作为一个regerence类型数据出现。"new Object()"这部分语句将反映到Java堆中,形成一块存储了Object类型所有实例数据值的结构化内存。另外在Java堆中还必须包含能查找到此对象类型数据(如对象类型、父类、实现的借口、方法等)的地址信息,这些类型数据则存储在方法区中。
该笔记来自【深入理解Java虚拟机:JVM高级特性与最佳实践】