JVM运行时数据区域

2018-02-23  本文已影响0人  jqdywolf
运行时数据区.png

图中白色为线程独有,图中蓝色为线程之间共有

1. 线程计数器

当前线程执行字节码的行号指示器。
字节码解释器就是通过改变这个值来指示下一条需要执行的字节码指令。循环、跳转等基础功能都是依赖这个来实现。

当线程正在执行一个Java方法,线程计数器指向的是正在执行的字节码的地址。当线程正在执行一个Native方法时,则线程计数器为空。因为Native方法不存在字节码的概念。

特点:线程独有。

原因:在多线程程序中,由于CPU个数的限制,需要线程的切换,为了能够在线程切换后回到原来的执行位置,就需要线程计数器。

2. 虚拟机栈

虚拟机栈:描述的是Java方法执行的内存模型。
每个方法在执行的时候同时都会创建一个栈帧--用于存储局部变量表、操作栈、动态链接、方法出口等信息。每个方法在开始被调用直至执行结束,就对应着一个栈帧在虚拟机栈中入栈和出栈的过程。

局部变量表

可抛两种异常:线程请求的栈深度大于虚拟机允许的深度抛出StackOverFlow异常;在虚拟机是可扩展的基础上(并不是无限,也有一个固定长度),当请求无法申请足够的内存时,抛出OutOfMemoryError异常。

3. 本地方法栈

4. 堆

5. 方法区

6. 运行时常量池

是方法区的一部分。

7. 直接内存

另加
博主个人感悟:做笔记是对的,切记不要照抄书本上的东西。
一定加入自己的理解在里面。不然就会过目就忘,也达不到深层的理解。

上一篇 下一篇

猜你喜欢

热点阅读