java运行时数据区(JVM内存模型)
作者:bin运行时数据区如图:
程序计数器:
线程私有,记录程序运行的位置,通过改变程序计数器的值,来选择下一条需要执行的指令。
java虚拟机栈
线程私有,方法的调用与返回伴随着入栈和出栈操作,栈中存储局部变量表、操作数栈、动态链接、方法出口等信息。
其中局部变量的存储空间以局部变量槽来表示,一个槽32位,long和double会占2各槽,局部变量的槽位数量,在编译时候就确定了
本地方法栈
线程私有,调用本地方法的栈,hotSpot虚拟机将本地方法栈和虚拟机栈合二为一了。
java堆
线程共享,java堆时垃圾回收的主要区域,java线程会划分出线程私有的区域java堆和线程的TLAB
方法区
线程共享,用于存储,被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据
JDK8后,永久代不再存在,取而代之的时元空间
运行时常量池
是方法区的一部分,方法区中有一项 常量池表,用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。
直接内存
并不是java虚拟机运行时数据区的一部分,不受java堆大小的限制,受本机内存限制。