首页 > 其他分享 >JVM的架构,具体阐述一下各个部分的功能?还有.class文件的加载执行过程。

JVM的架构,具体阐述一下各个部分的功能?还有.class文件的加载执行过程。

时间:2024-08-30 11:48:19浏览次数:7  
标签:Java 字节 线程 JVM 执行 class 加载

以下内容由chatgpt生成,仅供个人学习。


JVM(Java Virtual Machine,Java 虚拟机)是运行 Java 程序的抽象计算机。它将编译后的 .class 文件(字节码)加载、解析、执行,并管理 Java 程序的内存、线程等资源。JVM 的架构可以分为以下几个主要部分:

1. JVM 架构

JVM 的架构包括以下几个重要的组件:

1.1 类加载子系统(Class Loader Subsystem)

  • 功能:负责加载 .class 文件,将字节码文件加载到内存中并转换成 JVM 能够理解的类对象。
  • 过程:类加载子系统会按需加载类,类的加载过程包括:加载、链接(验证、准备、解析)、初始化。

1.2 运行时数据区(Runtime Data Areas)

JVM 在运行时使用的一块内存区域,它可以进一步分为以下部分:

  • 方法区(Method Area):存储类信息(如字段、方法数据、构造函数)、常量池、静态变量等数据。方法区是线程共享的。
  • 堆(Heap):存储对象实例和数组。所有线程共享堆区。堆是垃圾收集(GC)的主要区域。
  • 栈(Stack):每个线程在 JVM 中都有一个独立的 Java 虚拟机栈,存储栈帧。栈帧包含局部变量表、操作数栈、动态链接、方法返回地址等。栈区是线程私有的。
  • 程序计数器(Program Counter, PC):指示当前线程执行的字节码指令地址。每个线程都有一个独立的 PC。
  • 本地方法栈(Native Method Stack):用于执行本地方法(使用其他编程语言如 C/C++ 编写的方法)。本地方法栈和 JVM 栈类似,是线程私有的。

1.3 执行引擎(Execution Engine)

  • 功能:负责解释执行字节码指令,或者将字节码编译成机器码执行。执行引擎包括解释器(Interpreter)和即时编译器(JIT Compiler)。
  • 解释器:逐条解释字节码指令,执行效率较低,但启动快。
  • JIT 编译器:将字节码转换为本地机器码以提高执行效率。JIT 编译器会在运行时分析热点代码,将其编译为高效的机器码。

1.4 本地接口(Native Interface)

  • 功能:允许 Java 程序调用本地方法(非 Java 语言实现的方法),这部分代码通常通过 JNI(Java Native Interface)来调用。

1.5 垃圾收集器(Garbage Collector)

  • 功能:负责自动管理和回收 JVM 堆中的对象。垃圾收集器会自动回收不再被引用的对象,释放内存。

2. .class 文件的加载与执行过程

当我们执行一个 Java 程序时,JVM 会按照以下步骤处理 .class 文件:

2.1 类的加载过程

  1. 加载(Loading):JVM 通过类加载器(ClassLoader)将 .class 文件的字节码从文件系统或网络等位置加载到内存中,并生成对应的 Class 对象。

    • 启动类加载器(Bootstrap ClassLoader):加载核心类库,如 java.lang.*
    • 扩展类加载器(Extension ClassLoader):加载扩展类库,如 JRE/lib/ext 目录下的类。
    • 应用程序类加载器(Application ClassLoader):加载应用程序的类和库。
  2. 链接(Linking):将加载的类文件进行链接,包括:

    • 验证(Verification):确保字节码符合 JVM 规范,没有安全问题。
    • 准备(Preparation):为类的静态变量分配内存,并将其初始化为默认值。
    • 解析(Resolution):将符号引用转换为直接引用,例如将方法、变量的符号引用解析为实际内存地址。
  3. 初始化(Initialization):执行类的静态代码块和静态变量的初始化操作。此阶段会触发类的初始化,按照代码中编写的顺序执行。

2.2 类的执行过程

  1. 执行类的 main 方法:JVM 找到主类的 main 方法作为程序的入口,并开始执行。执行的过程中,方法栈(栈帧)会逐步被压入和弹出。
  2. 解释执行或 JIT 编译:JVM 的执行引擎对字节码进行解释执行,或者在热点代码部分使用 JIT 编译,将字节码转换为机器码直接执行。
  3. 垃圾收集:JVM 在运行期间会根据需要执行垃圾收集,回收不再使用的对象。

通过这个架构和过程的解释,可以理解 JVM 如何有效地管理 Java 程序的执行和资源。JVM 的设计使得 Java 具有跨平台性和自动内存管理等特性,同时也为开发者提供了强大的性能和稳定性。

标签:Java,字节,线程,JVM,执行,class,加载
From: https://www.cnblogs.com/Si-wuxie/p/18388453

相关文章

  • 【JVM原理】类加载机制
    文章目录一、JVM组成二、类的生命周期2-1加载(Loading)2-2连接(Linking)2-3初始化(Initialization)2-4使用(Using)2-5卸载(Unloading)三、类加载器3-1类加载器的作用3-2类加载器的种类3-3类加载机制双亲委派机制(ParentDelegationModel)全盘负责委托机制(Fu......
  • maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器
    开心一刻有一天螃蟹出门,不小心撞倒了泥鳅泥鳅很生气地说:你是不是瞎啊!螃蟹说:不是啊,我是螃蟹概述maven-shade-plugin官网已经介绍的很详细了,我给大家简单翻译一下Thispluginprovidesthecapabilitytopackagetheartifactinanuber-jar,includingitsdependenciesa......
  • Class和Style与内联样式的绑定
    绑定HTMLClass示例对象语法我们可以传给 :class (v-bind:class 的简写)一个对象,实现动态地切换 class。也可以在对象中传入更多字段来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class 共存绑定内联样式:style的对象语法十分直观——看着非......
  • 【jvm】栈顶缓存技术
    目录1.说明2.技术背景3.技术原理4.应用场景5.优势与局限5.1优势5.2局限1.说明1.栈顶缓存技术(Top-of-StackCaching,简称ToS)。2.是一种在计算机体系结构中用于提高指令执行性能的优化技术。3.通常与流水线处理器(pipelining)相关,旨在减少数据冒险(datahazar......
  • swiper 模块加载
    import{Swiper,SwiperSlide}from'swiper/react'import{Autoplay,Pagination,Navigation}from'swiper/modules'//ImportSwiperstylesimport'swiper/css'import'swiper/css/pagination'import'swiper/css......
  • java中的enum-java中特殊的class;通过字节码来分析enum构成
    §1 先思考一个问题先思考一个问题:我们在enum类里,可以直接使用 values() 或 valueOf(Stringname) 方法,我们也没有在enum类里定义这两个方法,怎么就能直接使用呢? 这里先按下不表。下面是正文。§2enum类及其编译后的字节码在java编程中,我们经常会定义和使用枚举。简......
  • Mybatis-puls中select查询方法报错Can not find table primary key in Class
    1、项目参数springboot2.6.13jdk8Mybatis-Plus3.5.42、问题描述Mybatis-puls中select查询方法报错CannotfindtableprimarykeyinClass,org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.example.dao.FLowerDao.selectById3、......
  • 一起学Java(11)-[日志篇]教你分析SLF4J源码,掌握Logger接口实现类加载原理
    最近各种事情很忙,今天继续。在第十篇(一起学Java(10)-为项目引入Log框架(Log篇二-引入SLF4J接口层框架))中,我们为项目(https://github.com/lihongzheshuai/java-all-in-one)引入了SLF4J和Logback框架,按计划通过阅读源码研究下SLF4J的实现原理。全文详见个人独立博客:https://ww......
  • xhprof nginx配置的预加载代码
    <?php//var_dump(function_exists("register_shutdown_function"));//根据参数控制是否开启xhprofif((rand(1,100)>=1||!empty($_GET['xhprof']))&&PHP_SAPI!='cli'&&function_exists('xhprof_enable'))......
  • OOP-class02
    Chapter8ObjectandClass对象的概念:对象就是一个相关的实体,就像桌子,椅子这种类型的相关的对象,对于不同的对象就会存在着多个不相同的特征每个对象当中也具有着多个不同的属性,一个对象中具有着在客观实在中能够被唯一进行识别出来的,具有唯一性总结:对象就是在客观世界中能够......