【转帖】3.JVM内存结构概述

jvm,内存,结构,概述 · 浏览次数 : 0

小编点评

**JVM内存结构** **上层:** * 类加载子系统:负责将字节码文件加载到内存中。 * 类加载器:引导类加载器、扩展类加载器、应用类加载器或系统类加载器。 **中层:** * 方法区:包含方法的代码和局部变量。 * 堆区:存放对象的堆栈空间。 *栈区:用于局部方法的调用。 * 程序计数器:每个线程有一份,记录运行线程的数量。 **下层:** * 执行引擎:包含解释器、JIT编译器、垃圾回收器。

正文

1.JVM内存结构

在JVM系列的第一篇文章中已经给出了JVM内存结构的简图,下面是JVM内存结构更加详细的图。

在这里插入图片描述
同样,JVM的内存结构可以分为上中下3层。
上层主要是类加载子系统,负责将字节码文件加载到内存中。
类加载又分为具体的三个环节,加载(loading)、链接(linking)、初始化(Initialization)。
将字节码文件加载到内存中需要用到类加载器。图上提到了主要的3种类加载器,引导类加载器(BootStrap ClassLoader)、扩展类加载器(Extension ClassLoader)、应用类加载器或者叫系统类加载器(Application ClassLoader)。也可以自定义类加载器。
类加载的第二个环节是链接。分为验证、准备、解析三步。
类加载的第三个环节是初始化。对静态变量的初始化。

中层是运行时数据区
包括方法区、堆区、栈区(通常所说的java虚拟机栈)、程序计数器、本地方法栈。
程序计数器每一个线程有一份。
栈区每一个每一个线程有一份。每一个线程在栈区存储的单位叫做栈帧。栈帧又分为很细节的结构,比如LV(Local Variable),称为局部变量表或者称为本地变量表;OS(Operater Stack)操作数栈;DL(Dynamic Linking)动态链接;RA(Return Address)方法返回地址。
本地方法栈,用于本地C方法的调用。
堆区,多个线程共享,最大的一块空间,也是GC重点需要考虑的空间。
方法区,多个线程共享,存放类的信息,常量信息,方法的信息,只有HostSpot才有,J9和JRockit是没有的。

下层是执行引擎
包括解释器、JIT编译器、垃圾回收器3部分。

更多JVM文章请参考我的JVM专栏:https://blog.csdn.net/u011069294/category_10113093.html

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览118326 人正在系统学习中

与【转帖】3.JVM内存结构概述相似的内容:

【转帖】3.JVM内存结构概述

目录 1.JVM内存结构 1.JVM内存结构 在JVM系列的第一篇文章中已经给出了JVM内存结构的简图,下面是JVM内存结构更加详细的图。 同样,JVM的内存结构可以分为上中下3层。 上层主要是类加载子系统,负责将字节码文件加载到内存中。 类加载又分为具体的三个环节,加载(loading)、链接(l

【转帖】15.JVM栈帧的内部结构

目录 1.JVM栈帧的内部结构 1.JVM栈帧的内部结构 栈帧存储的数据可以分为下面的5个部分: 1.局部变量表(重点) 2.操作数栈(重点) 3.动态链接,也称为指向运行时常量池的方法引用 4.方法返回地址,也称为方法退出或者异常退出的定义 5.一些附加信息 每个栈帧都有自己的大小,各个栈帧的大小

【转帖】15.JVM栈帧的内部结构

目录 1.JVM栈帧的内部结构 1.JVM栈帧的内部结构 栈帧存储的数据可以分为下面的5个部分: 1.局部变量表(重点) 2.操作数栈(重点) 3.动态链接,也称为指向运行时常量池的方法引用 4.方法返回地址,也称为方法退出或者异常退出的定义 5.一些附加信息 每个栈帧都有自己的大小,各个栈帧的大小

【转帖】16.JVM栈帧内部结构-局部变量表

目录 1.局部变量表(Local variables) 1.局部变量表(Local variables) 1.局部变量表也称为局部变量数组或本地变量表。 2.局部变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量。(局部变量表的作用) 3.局部变量表示栈帧中的数据,栈帧被线程私

【转帖】15.JVM栈帧的内部结构

目录 1.栈中存储的是什么?2.栈的运行原理 1.栈中存储的是什么? 1.每个线程都有自己的栈,栈中存储的是栈帧。 2.在这个线程上正在执行的每个方法都各自对应一个栈帧。方法与栈帧是一对一的关系。 3.栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。 2.栈的运行原理 1.JV

【转帖】JVM 内存模型与垃圾回收

文章目录 1. JVM内存模型1.1. 程序计数器 (线程私有)1.2. Java 虚拟机栈 (线程私有)1.3. 本地方法栈 (线程私有)1.4. Java 堆 (线程共享)1.5. 方法区 (线程共享)1.6. 运行时常量池 (线程共享)1.7. 直接内存 (堆外内存) 2. 垃圾查找算法2.1

【转帖】JVM 元数据区的内存泄漏之谜

https://www.infoq.cn/article/Z111FLot92PD1ZP3sbrS 一、问题描述 某天,SRE 部门观察到一个非常重要的应用里面有一台服务器的业务处理时间(Transaction time)在某个时间点变为平时的 3 倍。虽然只持续了短暂的 2 秒,但是如果观察其一周

[转帖]jvm学习三-MAT内存分析工具的使用

目录 1 模拟内存溢出程序 1.1 jvm配置 1.2 测试代码 2 MAT工具进行内存分析 2.1 大纲介绍 2.2 Histogram视图介绍 2.3 Leak Suspects视图介绍 2.4 Dominator Tree 1 模拟内存溢出程序 1.1 jvm配置 -XX:+PrintGCDe

[转帖]第七篇:双管齐下,JVM内部优化与JVM性能调优

文章目录 一、前言二、编译时优化2.1 Javac编译器2.2 Java语法糖2.2.1 泛型和泛型擦除2.2.2 自动装箱、自动拆箱、遍历循环2.2.3 条件编译 三、运行时优化(核心:JIT编译器/即时编译器)3.1 HotSpot虚拟机内的JIT编译器3.1.1 编译器和解释器并存的架构3.1

[转帖]JVM(3)之垃圾回收(GC垃圾收集器+垃圾回收算法+安全点+记忆集与卡表+并发可达性分析......)

《深入理解java虚拟机》+宋红康老师+阳哥大厂面试题2总结整理 一、堆的结构组成 堆位于运行时数据区中是线程共享的。一个进程对应一个jvm实例。一个jvm实例对应一个运行时数据区。一个运行时数据区有一个堆空间。 java堆区在jvm启动的时候就被创建了,其空间大小也就被确定了(堆是jvm管理的最大