Java虚拟机的内存区域以及各区域主要用途

jvm在运行Java程序时,会有把内存分成如下几个区域:
《Java虚拟机的内存区域以及各区域主要用途》

区域线程私有/共享主要用途
程序计数器私有可以看作是当前线程执行的字节码行号指示器,字节码解释器会通过改变程序计数器的值来记录下一条需要执行的字节码命令分支、循环、跳转、线程恢复都需要依赖程序计数器来完成
虚拟机栈私有Java方法执行的内存模型:每个方法运行时都会创建一个栈帧,用于存储局部变量表(常见的各种基本数据类型以及对象引用)、操作数栈动态链接方法出口等信息;方法开始执行时,栈帧入栈;方法结束时,栈帧出栈
本地方法栈私有和虚拟机栈类似,虚拟机栈为虚拟机执行的java方法(字节码方法)服务,本地方法栈则是为虚拟机执行的Native方法服务;HotSpot虚拟机则把本地方法栈和虚拟机方法栈直接合到了一起
堆内存共享1. 虚拟机内存中最大的一块,所有线程共享;堆内存唯一的目的就是存放对象实例(对象或数组)
2. 同时堆内存也是垃圾回收器管理的主要区域,所以也被称作(gc堆);
3.堆内存可以分为新生代:Eden、Survivor(From、To)和老年代
方法区共享用于存储已经被加载类信息、常量、静态变量、即时编译器编译后的代码等
运行时常量池共享运行时常量池是方法区的一部分:Class文件中除了有类的版本、字段、方法、接口等基本信息外,还包括一项常量池,用来存放编译期生成的各种常量符号引用(虚拟机类加载的解析阶段会将常量池中的符号引用替换为直接引用)

参考资料:《深入理解Java虚拟机》- 周志明

    原文作者:java虚拟机
    原文地址: https://segmentfault.com/a/1190000017327827
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞