墨风如雪博客

  • 源码小店
  • 导航站
  • 登录
  • java
  • 资源分享
让AI使用变得如此简单
  1. 首页
  2. java
  3. 正文

Java 当中的只要组成部分 JVM

2023年 7月 13日 98点热度 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日

墨风如雪

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

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

文章评论

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

墨风如雪

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

最新 热点 随机
最新 热点 随机
告别机械感!OpenAudio S1让AI声音活起来 Sora触手可及!微软必应AI视频生成器,全民创作时代来临? 阿里WebAgent开源:引领自主搜索新纪元 重磅炸弹!字节跳动开源BAGEL:70亿参数,统一多模态理解与生成,AI“全能王”诞生记! 小米MiMo-VL:7B参数,怎么就成了多模态界的“越级打怪王”? 炸裂!DeepSeek 8B 量化版降临:告别显存焦虑,你的 3080 Ti 也能玩转顶级大模型了!
ComfyUI“打通任督二脉”:直接调用Veo2、GPT-4o等65大模型!一键串联你的AI工作流AI圈炸锅了!Mistral Medium 3:性能 SOTA,成本打骨折,企业玩家的新宠?字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器告别“微信黑箱”!Chatlog:让你的聊天记录也能拥有“AI大脑”!字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码?85倍速的视觉革命:苹果发布 FastVLM,让你的 iPhone ‘看图说话’,快到飞起!
只闻其声,不见其人:OpenAI的“声音魔盒”Voice Engine,15秒克隆是魔法还是潘多拉? JAVA当中的异常处理机制核心讲解 字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码? claude 3.7 sonnet 原型图平替,DeepSeek原型图开发指南 门罗币 (XMR)简介:了解这种匿名数字货币的特点和优势? 详解Mysql五种锁类型及其应用场景
标签聚合
动态规划 算法 设计模式 AI 教程 deepseek spring java

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

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策