java内存模型初窥探
jdk1.8以前的内存模型是这样的,
下面我分析一下他们的作用
方法区
方法区也叫永久区,一些类的信息:方法名 返回值什么的,常量,静态变量都放在里面,class文件加载
这是是线程共享的 她其实是放在堆中的永久代中的,但是这个永久代又和堆是隔离的
堆
堆中存放的是new的对象,是jVM中最大的空间
这个是线程共享的
虚拟机栈
这个是线程私有的 就是说,一个线程开一个虚拟机栈
我的理解是每当一个java方法运行的时候,就在当前的虚拟机栈压入一个新的栈帧,运行完之后,出栈
本地虚拟栈
本地虚拟栈和虚拟机栈差不多,但是他是为native服务的,我的理解是native是为别的语言服务的,比如java的底层C
当然也是线程私有
程序计数器
我的理解是字节码去执行代码的时候,程序计数器来告诉他们下一句代码是什么,当然也是私有的,每个线程一个程序计数器,来记录代码执行到哪里了。
jdk1.8后的改版
jdk1.8之后将方法区(永久区)去掉,变成了元数据区。他并没有在堆里面,而是直接在本地内存中。
堆也变成了这样