JVM 性能调优-JVM 内存区域划分
1.程序计数器(线程私有)
程序计数器(Program Counter Register),也有称作为 PC 寄存器。保存的是程序当
前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当 CPU 需要
执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根
据得到的地址获取到指令,在得到指令之后,程序计数器便自动加 1 或者根据转移指针得
到下一条指令的地址,如此循环,直至执行完所有的指令。也就是说是用来指示执行哪条
指令的。
由于在 JVM 中,多线程是通过线程轮流切换来获得 CPU 执行时间的,因此,在任一
具体时刻,一个 CPU 的内核只会执行一条线程中的指令,因此,为了能够使得每个线程
都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序
计数器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。因此,可以这么
说,程序计数器是每个线程所私有的。
在 JVM 规范中规定,如果线程执行的是非 native 方法,则程序计数器中保存的是当
前需要执行的指令的地址;如果线程执行的是 native 方法,则程序计数器中的值是
undefined。
由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,
对于程序计数器是不会发生内存溢出现象(OutOfMemory)的。
异常情况:
不存在
2.Java 栈(线程私有)