快速了解JVM

JVM模型

快速了解JVM
1、程序计数器
字节码解释器工作时候就是通过改变计算器值来选取下一条需要执行的字节码指令,分支、循环、跳转和异常处理等程序的控制流程都依赖它。
它是线程私有的,也就是一个线程一个时刻对应一个计数器,每次线程执行完任务都需要靠计数器来恢复到原来正确的位置。
如果线程执行的是方法,计数器值就是虚拟机此刻执行的字节码指令地址;如果是本地方法,计数器值为空。
2、Java虚拟机栈
其实这个就是我们经常说的“栈”,当然虚拟机栈是包含着栈的。它也是线程私有的。
虚拟机栈代表的是方法执行的内存模型。方法执行的时候,JVM创建一个栈帧(Stack Frame),这个帧存着局部变量表、操作数栈、动态连接和方法出口信息等。每个方法调用到执行完毕,就是对应一个栈帧进出虚拟机栈。
局部变量表存放基本数据类型–>boolean,byte,char,short,int float,long,double等。一个方法执行时,需要在栈帧中分配多大局部变量是确定的,运行期间不会改变局部变量表大小,因为局部变量表是编译期间完成分配的。
3、Java堆
它是所有线程共享的区域。存放着几乎所有对象实例和数组。同时它也是垃圾手机器管理的内存空间,也被称作GC堆
4、方法区
跟堆很像,线程共享,用于存储被虚拟机加载的类型信息、常量、静态变量,即时编译后的代码缓存数据等。有时候被称为永久代