java内存模型初窥探

jdk1.8以前的内存模型是这样的,

下面我分析一下他们的作用

方法区

方法区也叫永久区,一些类的信息:方法名 返回值什么的,常量,静态变量都放在里面,class文件加载

这是是线程共享的 她其实是放在堆中的永久代中的,但是这个永久代又和堆是隔离的

堆中存放的是new的对象,是jVM中最大的空间

这个是线程共享的

虚拟机栈

这个是线程私有的 就是说,一个线程开一个虚拟机栈

我的理解是每当一个java方法运行的时候,就在当前的虚拟机栈压入一个新的栈帧,运行完之后,出栈

本地虚拟栈

本地虚拟栈和虚拟机栈差不多,但是他是为native服务的,我的理解是native是为别的语言服务的,比如java的底层C

当然也是线程私有

程序计数器

我的理解是字节码去执行代码的时候,程序计数器来告诉他们下一句代码是什么,当然也是私有的,每个线程一个程序计数器,来记录代码执行到哪里了。

jdk1.8后的改版

jdk1.8之后将方法区(永久区)去掉,变成了元数据区。他并没有在堆里面,而是直接在本地内存中。

堆也变成了这样

原文地址:https://www.cnblogs.com/adroitwolf/p/14309863.html