java内存模型
关于内存模型网上资源简直不要太多,此文根据自己的理解总结了一下 博客小白,文章为原创,里面一些个人的观点可能不太准确或严谨,若有问题欢迎各路大神批评指正 首先是上图: java的内存可大范围分为两类: 一、线程隔离(线程私有): 所谓线程隔离也就是说这个区域的内存各个线程间相互独立,互不影响 1. 程序计数器(program counter register): 是一块比较小的内存空间,作用可以看做是当前线程执行字节码的行号指示器 在虚拟机的概念模型里,字节码解释器就是通过改变计数器的值来选取下一条要执行的字节码 比如分支,循环,跳转,异常处理等 说的简单些就是用来控制程序的走向; 一个处理器在一个时间只会处理一条线程中的指令,因此每条线程都会有一个单独的程序计数器,各个线程间互不影响 如果线程正在执行一段java方法,那么计数器记录的就是虚拟机指令的的地址; 如果执行的是native方法,计数器的值为空(Undefined) 程序计数器是java内存模型中唯一不会出现outOfMemory的地方 2. 虚拟机栈(java virtual machine stacks) 虚拟机栈也就是我们一般常说的栈 每个方法被执行的时候都会同时创建一个栈帧,用于存储局部变量表,操作栈,动态链接,方法出口等 每一个方法被执行到结束的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程