墨风如雪博客

  • 源码小店
  • 传家宝VPS
让AI使用变得如此简单
  1. 首页
  2. java
  3. 正文

Java 当中的只要组成部分 JVM

2023年 7月 13日 193点热度 0人点赞 0条评论

什么是 JVM

JVM(Java Virtual Machine) 是一种能够执行Java字节码的虚拟机,它是Java编程语言的核心并且是Java平台的一部分。

JVM的作用

JVM是Java程序运行的核心,它可以将Java源代码编译为字节码并在不同操作系统上执行,保证了Java跨平台的特性。同时,JVM还负责Java程序的内存管理、垃圾回收、线程管理等任务,确保Java程序的稳定和高效运行。

类的加载过程

类的加载过程一般分为加载、验证、准备、解析和初始化五个阶段。

加载

概念

加载指的是将类的字节码文件加载到JVM中,以便能够被JVM执行。

加载过程

类加载过程中通常会经过如下几个步骤:

  1. 加载字节码文件。
  2. 内部产生一个Java.lang.Class对象,表示该类。
  3. 将Class对象放入方法区中,并赋唯一编号。

验证

概念

验证阶段是确保被加载的类符合JVM规范的过程,防止有可能破坏JVM的安全和稳定性的操作或数据。

验证过程

验证阶段通常包括以下的几个步骤:

  1. 文件格式验证:检查字节码文件格式是否符合规范。
  2. 元数据验证:确保类中的所有元数据符合JVM规范。
  3. 字节码验证:对字节码进行验证,确保字节码的语法和语义正确。
  4. 符号引用验证:确保类中的所有符号引用都是合法的,不存在错误和不兼容的引用。
  5. 强制性验证:对类中的所有操作的合法性进行验证。

准备

概念

准备阶段是为类变量(也称为静态变量)在方法区分配内存,并设置默认的初值。

准备过程

  1. 为类变量在方法区中分配内存。
  2. 设置类变量的默认值。

解析

概念

解析阶段是将类中的符号引用解析为直接引用的过程。

解析过程

  1. 将常量池中的符号引用转换为直接引用。
  2. 解析符号引用的过程中可能会产生新的类加载,这些类也需要经过加载、验证、准备等过程。

初始化

概念

初始化阶段是类第一次使用时,JVM执行(类构造器)方法的过程。

初始化过程

  1. 初始化阶段由JVM负责保证每个类的类构造器方法在多线程下被正确的初始化,且此方法只被执行唯一的一次。
  2. 在初始化阶段中,JVM会根据方法中的类变量赋值动作,生成并加入 clinit 方法中,不同类变量的赋值动作按源代码中定义的先后顺序执行。

类的加载器

概念

类加载器是负责将类的字节码文件加载到JVM中的模块,它可以动态的加载类,实现动态扩展和替换。

分类

常见的类加载器分为四类:启动类加载器、扩展类加载器、应用程序类加载器和自定义类加载器。

启动类加载器

启动类加载器负责加载JVM运行时需要的基本操作库和Java系统类,它是JVM内置的加载器,通常使用C++编写,无法用Java程序实现或者替换。

扩展类加载器

扩展类加载器负责加载Java扩展库(JAVA_HOME/lib/ext目录下的jar包),它从系统属性“java.ext.dirs”所指定的目录中加载class文件。

应用程序类加载器

应用程序类加载器负责加载应用程序的类文件。它从CLASSPATH环境变量所指定的目录或jar文件中查找和加载类文件。

自定义类加载器

自定义类加载器可以通过编写自己的Java代码实现。自定义类加载器通常应用在环境隔离、热部署等场景。

类的卸载

概念

类的卸载指的是将已经加载到内存中的类的信息从内存中清除。

触发条件

类的卸载条件包括:

  1. 类的所有实例都已被GC回收
  2. 加载该类的类加载器已经被回收
  3. 该类的Class对象没有被引用

卸载过程

类卸载过程中,JVM会将该类和其内部对象销毁,并且释放对应的内存空间。

扩展点:JVM参数

JVM参数是控制JVM各种运行模式的参数。常用的JVM参数包括-Xms(初始堆大小)、-Xmx(最大堆大小)、-Xmn (年轻代大小)、-XX:+UseG1GC(启用G1垃圾回收器)等。

总结

JVM是Java程序运行的核心,它可以将Java源代码编译为字节码并在不同操作系统上执行,并且负责Java程序的内存管理、垃圾回收、线程管理等任务,确保Java程序的稳定和高效运行。类的加载过程包括加载、验证、准备、解析和初始化五个阶段,类的加载器负责将类的字节码文件加载到JVM中,实现类的动态扩展和替换。JVM参数可以通过控制JVM的各种运行模式来优化Java程序的性能和稳定性。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: java JVM 类加载 虚拟机
最后更新:2023年 6月 22日

墨风如雪

一个热爱生活,热爱分享的程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

墨风如雪

一个热爱生活,热爱分享的程序员

最新 热点 随机
最新 热点 随机
腾讯混元MT-7B:打破参数迷思,重塑机器翻译版图 瑞士AI宣言:Apertus如何定义开放大模型 月之暗面Kimi K2-0905:代码与创意的新篇章? 谷歌“蕉”傲登场!AI生图告别“走钟”时代 2025,AI世界模型新篇章:腾讯混元Voyager展望 单GPU秒产一分钟!MAI-Voice-1,微软语音AI的“核爆”时刻?
别再卷万亿参数了,这个4B模型正把AI工作站塞进你的手机全球最佳开放模型!OpenAI开源GPT-OSS,AI界迎来巨变!声音即影像:昆仑万维SkyReels-A3如何叩响内容创作的革命前夜9B参数硬撼72B,GLM-4.1V凭什么搅动AI江湖?2B参数掀翻巨头牌桌:昆仑万维UniPic 2.0的“四两拨千斤”天工V2发布:AI终于撕掉了“纯文本”的标签
Kling AI 2.0 炸场!快手这次不光“秀肌肉”,还要改写视频生成游戏规则? IBM WebSphere 企业级应用服务器 java spring bean的生命周期 图像生成新篇章:OpenAI GPT-image-1 模型深度解析与应用前瞻 spring 当中Bean Factory的生命周期详解 设计模式的八大准则
标签聚合
设计模式 spring 大模型 AI 算法 教程 java deepseek

COPYRIGHT © 2023 墨风如雪博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang