JVM运行时数据区与JVM堆内存模型小结

Posted LarryZeal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM运行时数据区与JVM堆内存模型小结相关的知识,希望对你有一定的参考价值。

前提

JVM运行时数据区和JVM内存模型是两回事,JVM内存模型指的是JVM堆内存模型。


那JVM运行时数据区又是什么?

它包括:程序计数器、虚拟机栈、本地方法栈、方法区、堆。


来看看它们都是干嘛的

程序计数器:保存当前线程执行的指令的地址(大意如此)。

虚拟机栈:由栈帧组成,而每个栈帧又包括局部变量表操作数栈动态连接(调用其他方法)、出口(被调用时返回值) -- 每个栈帧就代表了一个方法的执行。

本地方法栈:类似虚拟机栈,只不过方法改成了native方法。

方法区:保存了类的各种信息、类的常量、类的静态变量 -- 请注意,不包括类的普通变量!

:各种对象所在。


前三者都是线程内的资源,所以不会存在同步问题!

其实按照咕泡学院海天老师的说法是,程序计数器、虚拟机栈、本地方法栈 这三个对应了冯诺依曼结构中的运算器、控制器;而方法区、堆则对应了冯诺依曼结构中的IO和存储器。耳目一新!


再来看看JVM堆内存模型

我们常说的新生代、老年代、永久代(JDK1.8之后变成了MetaSpace),就是JVM堆内存模型!






最后,很多书上(包括教科书)都把堆(heap)叫做堆栈,而把栈(stack)叫做栈,个人觉得这是一种很扯淡的叫法。


待续。

以上是关于JVM运行时数据区与JVM堆内存模型小结的主要内容,如果未能解决你的问题,请参考以下文章

JVM内存模型小结

JVM内存模型

JVM内存模型及GC原理

jvm内存模型

JVM(Java虚拟机)详解(JVM 内存模型堆GC直接内存性能调优)

JVM系列:JVM内存模型