类在jvm之间的流转和存储哪些值

在Java虚拟机(JVM)中,类加载是一个复杂的过程,涉及到多个内存区域和组件。以下是类加载过程中,类信息在JVM中的流转和存储情况:

• 程序计数器(Program Counter Register):

• 程序计数器是一块较小的内存区域,用于存储指向下一条指令的地址。在类加载过程中,程序计数器主要用于记录当前线程执行的字节码指令的地址。类加载本身不在这个区域存储信息,但类加载后的方法调用会在这个区域记录。

• 栈(Stack):

• 栈是线程私有的,每个线程都有自己的栈。栈中存储了局部变量表、操作数栈、动态链接、方法出口等信息。

• 类加载后,当创建对象时,对象的引用会存储在栈的局部变量表中。方法调用时,方法的参数和局部变量也会存储在栈的局部变量表中。

• 栈中不会存储类的结构信息,如类的字段和方法,这些信息存储在堆和元空间中。

• 堆(Heap):

• 堆是Java虚拟机管理的最大的一块内存区域,用于存储对象实例和数组。

• 类加载后,当创建类的实例时,实例对象会存储在堆中。堆中的对象包含了类的字段信息,以及指向类的元数据的引用(即指向方法区的引用)。

• 堆中的对象存储了类的实例数据,但不存储类的结构信息(如类的字段和方法定义)。

• 元空间(Metaspace):

• 元空间是JDK 8引入的,用于替代之前的永久代(PermGen),用于存储类的元数据,如类的结构信息(字段、方法)、常量池、方法数据、方法代码等。

• 类加载后,类的元数据会被加载到元空间中。元空间中的数据是动态加载和卸载的,当某个类不再被使用时,其元数据可以被卸载。

• 元空间并不存储类的实例,只存储类的元数据。

总结来说,类加载后,类的结构信息(如类的字段和方法定义)存储在元空间,类的实例数据存储在堆中,局部变量存储在栈中,程序计数器用于记录方法调用的地址。这些区域协同工作,使得Java虚拟机能够有效地管理内存和执行字节码。

相关推荐
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
小江的记录本8 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本8 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
ID_1800790547312 小时前
小红书评论 API 接口详解与实战开发
java·jvm·c++
東雪木14 小时前
JVM 与 Java 内存模型 专属复习笔记
java·jvm·笔记·java面试
Undergoer_TW17 小时前
Colmap 进军嵌入式:SQLite 数据库从崩溃退出到自动治愈
jvm·数据库·sqlite
骄马之死18 小时前
ThreadLocal 核心原理
java·jvm·算法
一只小白00018 小时前
【JVM | 第二篇】—— 类加载器 & 双亲委派模型
jvm
Nyarlathotep011318 小时前
自动内存管理(3):HotSpot中垃圾收集的实现
jvm·后端
仍然.19 小时前
浅谈JVM
jvm