jvm 运行时数据区域(读书笔记)
java虚拟机运行是区域主要分为五个 程序计数器 虚拟机栈 本地方法栈 堆 方法区 1.程序计数器 程序计数器是一块比较小的内存空间。可以看作是当前现场所执行的字节码的行号指示器。每条线程都有一个独立的程序计数器,在各线程之间是独立存储的,这类内存区域为“线程私有”内存。如果是一个Native方法这个计数器值为空(Undefined)。 2.java虚拟机栈 虚拟机栈也是线程私有的,它的生命周期和线程相同。每个java方法在执行的时候都会创建一个栈帧。用于储存局部变量表,操作数栈,动态链接,方法出口信息等。 局部变量表存放了编译期可预知的各种基本数据类型,对象引用,returnAddress类型。 局部变量表所需要的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部空间是完全确定的,在方法运行期间不会改变局部变量的大小。 3.本地方法栈 本地方法栈和虚拟机栈功能基本相同,只是针对的对象不同。它针对的是虚拟机使用到的Native方法服务。在虚拟机规范中对它没有强制规定,可以把它合并到虚拟机栈中。 4.堆 堆是java虚拟机所管理的最大的一块内存区域。java堆...