本文重点
我们前面已经将类的加载过程进行了全面的了解和学习,按照如下所示的JVM架架构图,接下来我们应该学习运行时数据区了。
运行时数据区
如上图所示,灰色的标识线程私有,基本不存在垃圾回收。而非灰色的是线程共享的,存在垃圾回收。
PC计数器
每个线程都有一个程序计数器,这个是线程私有的,它就是一个指针,指向方法区中的方法字节码,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。也就是说它记录了方法之间的调用和执行的情况。
如果执行的是Native方法,那么这个计数器就是空的(Underfined)。pc寄存器可以完成分支、循环、跳转、异常处理、线程恢复等基础功能。程序计数器这个内存区域是唯一一个在JVM规范中没有规定任何OutOfMemoryError(内存不足错误)的区域。
栈
栈内存主管java的运行,是在线程创建时创建的,它是线程私有的,它的生命周期是跟随线程的生命期,也就是说线程结束栈内存就释放了,对于栈来说不存在垃圾回收的问题。栈管运行,堆管存储。
本地方法区
native是java的关键字,被nat