Java内存区域——程序计数器

 

Java内存区域——程序计数器

我们这个图

Java内存区域——程序计数器

这个图中画的大小并不能表示每一块内存区域的大小,这只是一个概念模型,我们只是通过这个图看一下有哪些区域,不要认为在这个图中区域大就认为它所占的内存区域就大。

Java内存区域——程序计数器

这个怎么理解呢?比如我们随便写一个代码

Java内存区域——程序计数器

我们在用这个代码的时候,直接运行就可以了,这里先不说这个方法是怎么加到方法栈中的,当我们这个代码在运行的过程中,它是从上往下一行一行的去执行

Java内存区域——程序计数器

其实这里就用到了程序计数器,我们可以认为这个方法进栈之后,每一行代码都有一个标识,比如

Java内存区域——程序计数器

首先执行第一行,然后执行第二行,以此类推,每次都从当前行找出来下一个要执行的语句来进行执行。

Java内存区域——程序计数器

从第2行开始往下执行,当执行第4行时,因为a<b所以,程序计数器的值变成了7,就会去第7行执行。

可以把程序计数器理解成,当前线程所执行的字节码的行号指示器

Java内存区域——程序计数器

就是每一个线程都会有它自己的程序计数器。

每一个线程是一个顺序执行单元,每一个线程都会有它自己的程序计数器。比如说,一个方法不在main方法中,然后,每次开线程来调用这个方法的时候,每一个线程都有它自己的程序计数器。

线程是一个顺序执行单元,那么,每一个执行单元,它都会有一个单独的程序计数器,那么,在执行程序的过程中程序计数器是独立的。

Java内存区域——程序计数器

也就是我们这里标的1,2,3,4,5

Java内存区域——程序计数器

当然,它不是这样的1,2,3,4,5。

Java内存区域——程序计数器

为什么这个区域没有规定任何的内存溢出的情况呢?因为,我们并不操作这一块,作为开发者来讲,是不需要操作程序计数器的,程序计数器是由JVM内部维护的,所以是没有内存溢出情况。

Java中是不能用goto的,goto就是跳到某一行,它就类似于操作程序计数器。goto是Java中唯一的一个保留字,保留字就是,Java中没有,但是也不让开发者用的一个单词。保留字的目的就是为了可能在以后的版本中会增加这么一个标识作为它的一个关键字来使用