图解
运行时数据区是jvm中非常重要的一部分 这里看一下图 中间部分就是我们要讲的内容了 我们会分五个部分进行讲解
这篇文章呢 就大致提一下 对这些区域有个整体的印象即可
线程共享
可以看到 红色的部分有方法区和堆 这两个区域都是线程共享的 而其他区域都是 线程私有的 这么设置当然有好处了
打个比方 如果程序计数器是线程共享的 就会导致运算结果 10+20+30 在多线程的情况下都会出现错误 这当然是不合理的
程序计数器
也成称为pc寄存器 它是用来存储下一条指令的地址 由存储引擎去执行
简单来讲 1+2 会有如下几步
- 读取1
- 读取2
- 相加操作
- 得到结果
这四步都对应了相应的字节码指令
虚拟机栈
每个方法的运行都对应的入栈出栈的过程 这是一种快速有效的分配存储方式
栈中存储栈帧 每个栈帧就对应一个方法
本地方法栈
与虚拟机栈类似 只不过里面存放的都是一些c语言的方法 被称之为本地方法
堆
主要是存放对象的 也是内存管理 垃圾回收的重点区域 里面更细节的东西我们以后单独再讲
方法区
这个图比一般的都要大 主要是找的图比较好 并不是说它是最重要的 里面主要存放了类型信息