Java运行内存区域
Java的运行数据区域分为:程序计数器、方法区、本地方法栈、虚拟机栈、堆、运行时常量池。
程序计数器:从字面意思上很容易理解错误(第一眼看见我还以为仅仅是Count计数器),其实它的作用是保存字节码指令,即CPU需要哪种操作,便改变这个程序计数器的值来选取下一条字节码指令,分支、循环、跳转、异常处理等都依赖这个计数器完成。Java是支持并发的,所以每个线程都有自己的一个程序计数器,各个线程的程序计数器互相独立。
Java虚拟机栈:它描述的是java方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧(Stack Frame)用来存储局部变量表、操作数栈、动态链接等信息。每一个方法从调用到结束的过程实质上就是一个栈帧在虚拟机栈的一个出栈、入栈操作。 其中的局部变量存放看了编译期可知的基本数据类型、对象引用。
本地方法栈:它的作用和JAVA虚拟机栈的作用类似,不同的是它是为JAVA虚拟机服务的,如java虚拟机需要调用一个Native方法服务,那么这个Native方法运行时的内存模型就存储在本地方法栈中。
堆:它是JVM所管理的最大一块内存,存放几乎所有的对象实例和数组。是一个所有的线程所共享的内存区域。
方法区:和堆一样是一个线程共享的内存区域,它的作用是存储已经被加载后的类信息、常量、静态变量、编译后的代码数据等。
运行时常量池:它是方法区的一部分,是Class信息中的一部分,用于存放编译期生成的各种字面量和符号引用。
Java在执行操作的时候通过JVM的执行引擎,将程序编译后分别存在在堆和方法区中,然后进入本地库接口当CPU需要执行某一个方法的时候在程序计数器改变字节码加载java虚拟机栈和本地方法栈。(自己的想法)
更详细完整的内容:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。