1.程序计数器
定义:程序计数器(Program Counter Register)是JVM中一块较小的内存空间。解释器在解释JVM指令为机器码以供CPU执行时,会去程序计数器当中找到jvm指令的执行地址。
作用:记住下一条jvm指令的执行地址
特点:线程私有的、不会存在内存溢出
2.虚拟机栈
什么是虚拟机栈:
- 每个线程运行时所需要的内存,称为虚拟机栈。
- 每个Java方法执行时,Java虚拟机都会创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。
- 每个栈由多个栈帧组成,每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。
3.本地方法栈
什么是本地方法栈:本地方法栈与虚拟机栈的作用相似,当Java虚拟机调用一些本地方法时,需要给本地方法提供的一些内存空间。本地方法是指不是由Java代码编写的一些方法,Java代码可以通过本地方法与操作系统进行交互。
4.堆
什么是堆:堆是Java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,Java世界里几乎所有的对象实例都在这里分配内存。
特点:
- 因为堆是线程共享的,所以堆中对象都需要考虑线程安全的问题
- 有垃圾回收机制