JVM类加载机制详解

JVM系列1——类加载机制 使用java命令运行某个类的main函数启动程序时,首选需要通过类加载器把主类加载到JVM。类加载过程为加载->验证->准备->解析->初始化->使用->卸载七个阶段。 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

JVM知识体系及类加载机制详解

一、JVM知识体系概述

Java虚拟机(JVM)是Java程序执行的平台,它将Java源代码编译成字节码,并负责执行这些字节码。JVM的核心功能包括内存管理、执行引擎、垃圾回收(GC)等。JVM的知识体系涵盖了以下几个方面:

  1. 类加载机制:负责将Java类文件加载到JVM中,创建相应的Java对象。类加载机制涉及类加载器、类加载过程(加载、连接、初始化)、类加载器层次结构等。
  2. 内存模型:定义了JVM的内存结构,包括堆(Heap)、栈(Stack)、方法区(Method Area)、PC寄存器(Program Counter Register)等。
  3. 垃圾回收:自动回收不再使用的对象占用的内存空间。垃圾回收机制涉及GC Roots可达性分析、分代收集理论、引用类型、垃圾回收算法等。
  4. JIT编译:即时编译器,将字节码编译成本地机器码执行,以提高程序执行效率。
二、类加载机制

类加载机制是JVM的核心机制之一,包括以下过程:

  1. 加载:查找并加载类的定义信息到JVM中。类加载器负责将类文件读取到内存中,并创建一个Class对象。
  2. 连接:验证类信息,准备类在运行时的内存布局。连接过程包括验证、准备、解析三个步骤。
  3. 初始化:执行类构造器(<clinit>())方法,初始化类变量。初始化过程在连接阶段之后进行。
三、双亲委派模型

双亲委派模型是JVM中类加载器的一个设计模式,要求除了顶层的启动类加载器外,其余的类加载器都委托其父类加载器进行加载。这种设计可以避免类的重复加载,保证类型的一致性。

四、自定义类加载器

在Java中,我们可以通过继承ClassLoader类或实现ClassLoader接口来创建自定义类加载器。自定义类加载器可以用于实现特定的类加载逻辑,例如热部署、代码隔离等。

五、模块化系统(JPMS)

Java Platform Module System(JPMS)是Java 9引入的一个模块化系统,它允许将Java程序分解为多个模块,从而提高系统的可维护性和性能。模块化系统通过模块描述文件(module-info.java)来定义模块的依赖关系。

六、内存模型与运行时数据区

JVM的内存模型包括以下几个部分:

  1. 堆:存储所有实例和数组的内存区域。堆是JVM管理的最大一块内存区域,其大小可以通过JVM参数进行调整。
  2. 栈:存储局部变量和方法的参数。每个线程都有自己的栈空间,栈空间的大小也由JVM参数控制。
  3. 方法区:存储类信息、常量、静态变量等。方法区的大小也由JVM参数控制,且通常比堆空间小。
  4. PC寄存器:存储当前线程所执行的指令的地址。PC寄存器是线程私有的,每个线程都有自己的PC寄存器。
七、内存溢出场景分析

内存溢出是指程序在运行过程中消耗了过多的内存,导致系统无法分配足够的内存。常见的内存溢出场景包括:

  1. 无限循环创建对象:例如,在循环中不断创建新的对象,导致堆空间不足。
  2. 大对象占用过多内存:例如,创建一个非常大的对象,导致堆空间不足。
  3. 内存泄漏:例如,某个对象不再使用,但其引用关系未被正确释放,导致内存无法回收。
八、垃圾回收

垃圾回收是指JVM自动回收不再使用的对象占用的内存空间。垃圾回收的过程包括:

  1. GC Roots可达性分析:从GC Roots开始,向上遍历所有可达对象,不可达的对象将被回收。
  2. 分代收集理论:将对象分为新生代和老年代,分别采用不同的回收策略。
  3. 引用类型:包括强引用、软引用、弱引用和虚引用,不同类型的引用对垃圾回收有不同的影响。
  4. 垃圾回收算法:包括标记-清除、复制、整理等算法。
九、并发收集器

并发收集器可以在应用程序运行时进行垃圾回收,从而减少停顿时间。常见的并发收集器包括:

  1. CMS(Concurrent Mark Sweep):一种以降低停顿时间为目标的并发收集器。
  2. G1(Garbage-First):一种以预测停顿时间为目标的并发收集器。
  3. ZGC(Z Garbage Collector):一种低延迟的垃圾回收器。
十、停顿时间控制策略

为了提高应用程序的性能,JVM提供了多种停顿时间控制策略,包括:

  1. 自适应调节策略:根据程序运行情况动态调整垃圾回收参数。
  2. 最大停顿时间目标:设定最大停顿时间,JVM会尽量满足这个目标。
十一、性能调优与JVM参数配置

性能调优是提高JVM性能的重要手段,常见的调优方法包括:

  1. JVM参数配置:通过设置JVM参数来调整内存大小、垃圾回收策略等。
  2. 监控与日志:使用JVM监控工具和日志来诊断性能问题。
十二、内存泄漏诊断

内存泄漏是指程序中存在未被释放的内存,导致内存消耗不断增加。诊断内存泄漏的方法包括:

  1. 堆转储分析:分析堆转储文件,找出内存泄漏的原因。
  2. 内存分析工具:使用内存分析工具,如MAT(Memory Analyzer Tool)来诊断内存泄漏。
十三、JIT编译优化

JIT编译器可以将Java字节码编译成本地机器码,从而提高程序的执行效率。JIT编译器的主要优化技术包括:

  1. 指令重排序:优化指令执行顺序,减少指令间的依赖。
  2. 内联:将方法调用替换为方法体,减少函数调用的开销。
  3. 循环展开:将循环体中的指令复制到循环外,减少循环开销。

Spring Boot知识体系详解

一、Spring Boot知识体系概述

Spring Boot是一个基于Spring框架的快速开发平台,它简化了Spring应用的初始搭建以及开发过程。Spring Boot的知识体系可以概括为以下几个方面:

  1. 自动配置:根据项目依赖自动配置Spring应用程序。自动配置的核心是@EnableAutoConfiguration注解,它通过扫描类路径下的所有配置类,根据条件化配置规则自动启用相应的配置。
  2. 起步依赖:简化依赖管理,通过引入起步依赖来提供所需的功能。起步依赖是Spring Boot的核心概念之一,它通过引入一个起步依赖来提供所需的功能。
  3. 配置文件管理:使用配置文件来管理应用程序的配置信息。配置文件包括application.yml和application-{profile}.yml等。
  4. 监控与日志:提供监控和日志功能,方便调试和性能分析。
二、自动配置与@EnableAutoConfiguration原理

Spring Boot的自动配置功能可以根据项目依赖自动配置Spring应用程序。@EnableAutoConfiguration注解是自动配置的核心,它通过扫描类路径下的所有配置类,根据条件化配置规则自动启用相应的配置。自动配置的实现原理主要包括以下步骤:

  1. 扫描类路径下的所有配置类。
  2. 根据条件化配置规则,确定需要启用的配置类。
  3. 创建相应的Bean实例,并注入到Spring容器中。
三、条件化配置(@Conditional)

条件化配置允许我们在满足特定条件时才应用某些配置。常见的条件化配置注解包括:

  1. @ConditionalOnClass:当存在特定类时才应用配置。
  2. @ConditionalOnBean:当存在特定Bean时才应用配置。
  3. @ConditionalOnMissingBean:当不存在特定Bean时才应用配置。
四、自定义Starter开发

自定义Starter可以帮助开发者简化依赖管理,提供一套完整的依赖包。开发自定义Starter需要创建一个Maven项目,并添加必要的依赖。自定义Starter的开发步骤如下:

  1. 创建一个Maven项目。
  2. 添加必要的依赖。
  3. 定义起步依赖。
  4. 编写自动配置类。
  5. 编写配置属性。
五、起步依赖与依赖管理机制

起步依赖是Spring Boot的核心概念之一,它通过引入一个起步依赖来提供所需的功能。依赖管理机制包括:

  1. BOM(Bill of Materials):定义了项目所依赖的所有组件的版本。
  2. 版本冲突解决:使用Maven的依赖管理机制来解决版本冲突。
六、第三方库集成模式

Spring Boot支持多种第三方库的集成模式,包括:

  1. 自动配置:通过自动配置来集成第三方库。
  2. 配置属性:通过配置属性来配置第三方库。
七、Actuator与健康检查

Spring Boot Actuator提供了一系列端点,用于监控和操作应用程序。健康检查端点用于检查应用程序的健康状态。

八、度量指标收集

Spring Boot Actuator支持度量指标收集,可以通过HTTP端点或JMX来访问度量指标。

九、自定义Endpoint开发

自定义Endpoint允许开发者创建自己的端点,用于监控和操作应用程序。

十、配置文件管理

Spring Boot使用配置文件来管理应用程序的配置信息。配置文件包括:

  1. application.yml:应用程序的基本配置。
  2. application-{profile}.yml:多环境配置。
十一、配置加载优先级

Spring Boot提供了多种配置加载优先级,包括:

  1. 命令行参数:最高优先级。
  2. 配置文件:次高优先级。
  3. 系统属性:再次高优先级。
十二、动态配置刷新

Spring Boot支持动态配置刷新,允许在应用程序运行时更新配置。

十三、监控与日志

Spring Boot提供了监控和日志功能,包括:

  1. Micrometer:支持多种监控工具。
  2. Logback/SLF4J:日志框架。
十四、分布式链路追踪

Spring Boot支持分布式链路追踪,可以帮助开发者追踪分布式系统中的请求。

十五、扩展机制

Spring Boot提供了扩展机制,包括:

  1. AutoConfigurationBean生命周期扩展点:在AutoConfigurationBean的生命周期中添加自定义逻辑。
  2. 响应式编程支持:支持响应式编程模型。

通过以上对JVM和Spring Boot知识体系的详细描述,我们可以看到这两个技术在实际开发中的应用和重要性。了解这些知识,有助于我们更好地进行Java应用开发和性能优化。

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

torch.nn.rnn实现循环神经网络 ------------------------------------nn.rnn模型实现。#------------------------------------模型实现。#-----------------------------------训练模型。#-----------------------------------训练模型。#--------------------------------读取数据。实现循环神经网络,并在至少一个数据集上进行实验,从训练时间、预测精度、... 阅读详情

相关推荐

24位ADC的精度陷阱:为什么你的ADS1232实测性能不达标?

本文深入探讨了24位ADC芯片ADS1232在实际应用中性能不达标的原因,揭示了高精度ADC性能依赖周边电路设计的关键问题。通过分析电源系统、参考电压稳定性、PCB布局等常见陷阱,提供了优化方案和调试技巧,帮助工程师充分发挥ADS1232的潜力,实现接近理论值的测量精度。

weixin_28285943的博客 405

JVM 类加载机制详解

通过前面的分析,我们可以看出,除了和本地实现密切相关的启动类加载器之外,包括标准扩展类加载器和系统类加载器在内的所有其他类加载器我们都可以当做自定义类加载器来对待,唯一区别是是否被虚拟机默认使用。首先检查请求的类型是否已经被这个类装载器装载到命名空间中了,如果已经装载,直接返回;否则转入步骤2;委派类加载请求给父类加载器(更准确的说应该是双亲类加载器,真实虚拟机中各种类加载器最终会呈现树状结构),如果父类加载器能够完成,则返回父类加载器加载的Class实例;否则转入步骤3;

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 4780

超越界面设计:GUI Guider与LVGL在STM32F103上的系统集成与架构思考

本文探讨了GUI Guider与LVGL在STM32F103微控制器上的系统集成与架构设计,重点分析了工程模块化组织、内存管理优化、硬件驱动接口设计以及FreeRTOS多任务集成。针对STM32F103ZET6的资源限制,提供了实用的移植策略和性能优化方案,帮助开发者构建高效、可维护的嵌入式GUI系统。

j2k3l4的博客 921

Java-10.14

内存分配与回收策略 Minor GC 和 Full GC Minor GC:回收新生代,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快。 Full GC:回收老年代和新生代,老年代对象其存活时间长,因此 Full GC 很少执行,执行速度会比 Minor GC 慢很多。 内存分配策略 对象优先在 Eden 分配 大多数情况下,对象在新生代 Eden 上分配,当 Eden 空间不够时,发起 Minor GC。 大对象直接进入老年代 大对象是指需要连续内存空

Desperate_gh的博客 708

从零开始开发AI Agent:基于大模型的智能体实战指南

### 摘要 本文介绍了AI Agent的开发全流程,从基础概念到实际部署,涵盖大模型集成、工具调用和记忆系统构建等核心技术。通过电商客服案例展示实战应用,并提供调试优化与部署方案,最后展望了AI Agent的未来发展方向,帮助开发者快速掌握智能体开发技能。

ghs_gss的博客 4860

保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控加装‘眼睛’,实现自动避障与定高

经过多次测试,前向雷达的最佳安装位置是机架前部下方5-10cm处,倾斜角度20-30度。电源方面,建议为CAN设备单独供电,避免电机启动时的电压骤降导致数据异常。北醒TFmini-i-CAN雷达与PixHawk飞控的组合,为DIY爱好者打开了低成本实现智能避障的大门。实际部署时,需确保整个CAN网络的波特率一致(TFmini-i默认为250kbps),每个设备具有唯一ID。雷达的安装角度也直接影响检测效果,建议通过3D打印支架将雷达向前下方倾斜15-30度。当使用多个雷达时,需为每个设备创建独立的参数组。

weixin_30892889的博客 336

jvm-类加载机制-即将作废

二、类加载机制 2.1 整体流程 基本流程:class文件加载至内存,链接(校验、解析),初始化;最终形成JVM可以直接使用的JAVA类型的过程。 加载:在方法区形成该类的运行时数据结构; 链接:class文件是否存在问题;一些符号引号替换成直接引用。具体如下: 校验:检查导入类或接口的二进制数据的正确性;(文件格式验证,元数据验证,字节码验证,符号引用验证) 准备:给类的静态变量分配并初始化存储空间; 解析:将常量池中的符号引用转成直接引用; 初始化:到了初始化阶段,才真正去执行Java里面

sinat_34814635的博客 1468

【教程4>第6章>第26节】基于FPGA的MMSE信道估计与均衡系统实现与整体测试,并对比LS信道估计

通过前面几个章节的学习,我们完成了MMSE信道估计和均衡系统。为了进一步验证MMSE信道估计的性能,我们在系统的最后,增加一个信道估计误差计算程序。由于MMSE信道估计,其主要优势在SNR较小时提现,因此测试对比时,我们在testbench中,将SNR设置为2db。然后m值,我们不考虑一个固定值,而是一直累加,直到所设置的仿真时间结束。通过对比可以看到,MMSE信道估计性能优于LS信道估计。这样方便FPGA中的误差计算。

FPGA/MATLAB学习教程/源码/项目合作开发 1596

《JAVA虚拟机深度解刨》-- JVM类加载机制

JVM类加载机制,Tomcat类记载机制,JDK源码

lmj3732018的博客 9658

数字游民产业小报告 · 2025

2025 年全球数字游民约(不同统计口径差异很大,低估法约 4,000 万,高估法 8,000 万),美国来源占比最高。:2025 Q1 约岗位允许一定程度远程;2024 年美国员工至少部分远程(全球 2023 年约 28%)。:到 2025 年,提供数字游民/远程工作签证(媒体口径 50–73 个不等;福布斯 66、Citizen Remote 50+、有机构清单称 73)。:以英国为例,期望未来一年全勤到岗、企业因强制返岗出现离职,说明“灵活/远程”仍是劳动力市场的筹码之一。

Anthony1453的博客 1465

C#调用企业微信JS-Sdk实现扫描二维码

企业微信JS-SDK是企业微信面向网页开发者提供的基于企业微信内的网页开发工具包。通过使用企业微信JS-SDK,网页开发者可借助企业微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用企业微信分享、扫一扫等企业微信特有的能力,为企业微信用户提供更优质的网页体验提示:生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是H5应用调用企业微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。

清浅 937

JVM初探——走进类加载机制|三大特性 | 打破双亲委派SPI机制详解

我们在使用特定的驱动实现时,不希望修改现有的代码,而希望通过一个简单的配置就可以达到效果。当服务的提供者提供了一种接口的实现之后,需要在classpath下的META-INF/services/目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。缓存机制将会保证所有加载过的Class都将在内存中缓存,当程序中需要使用某个Class时,类加载器先从内存的缓存区寻找该Class,只有缓存区不存在,系统才会读取该类对应的二进制数据,并将其转换成Class对象,存入缓存区。

qq_74092815的博客 1574

Python 爬虫教程:企业官网基本信息抓取

本文介绍了使用Python爬虫技术抓取企业官网信息的方法,包括公司名称、简介、联系方式、地址、产品及新闻等数据。通过Requests和BeautifulSoup库实现网页请求与解析,并利用Pandas存储数据为CSV文件。同时提供了应对反爬虫机制(如设置User-Agent、代理IP池、延迟请求等)的解决方案,帮助高效获取企业公开数据。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1859

【JVM】详解类加载机制

对于一个类来说,它的生命周期是这样的: 当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化三个步骤对该类进行初始化。所以将这三个步骤称为类加载。 其中连接又分为三步:验证、准备、解析。下面我们来仔细了解一下类加载的过程:当类被加载之后,系统会为之生成一个对应的Class对象,接着将会进入连接阶段,连接阶段负责把类的二进制数据合并到JRE中(意思就是将java类的二进制代码合并到JVM的运行状态中)。类连接又可分为以下三个阶段:初始化是为类的静态变量赋予正确的初始值,准备阶段

weixin_48271092的博客 3153

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JVM类加载机制详解(一)JVM类加载过程

首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1、什么是类加载?类加载的时机? 2、什么是类初始化?什么时候进行类初始化? 3、什么时候会为变量分配内存? 4、什么时候会为变量赋默认初值?什么时候会为变量赋人为设定的初值? 5、类加载器是什么? 6、如何编写一个自定义的类加载器? 首先,在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*

Leeon的博客 6万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

详解JVM类加载机制

笔者的笔记都记录在有道云里面,因为公司原因办公电脑无法使用有道云,正好借此机会整理下以前的笔记顺便当做巩固复习了,也因为记笔记的时候不会记录这些知识来源何地,所以如果发现原创后可找我,我会在后面加上原创链接。

T_Kuuga的博客 293

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【JVM第1集】jvm类加载机制详解

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成能直接被虚拟机使用的java类型,这就是虚拟机的类加载机制。在Java中,类型的加载和连接过程都是在程序的运行期间完成的,这样虽然会在类加载的时候增加一些性能开销,但却为Java程序提供了高度的灵活性,Java的动态扩展语言特性就是依赖于运行期动态加载和动态连接特点实现的。

学不可以已,活到老,学到老。 1077

JVM详解【五】JVM的类加载机制

JVM的类加载机制 Java类加载机制的定义 ​ 把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。在Java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点来实现的。 JVM的类加载阶段 ​ JVM的类加载分为5个阶段:加载、验证、准备、解析和初始化。在类

高电平的博客 3380

JVM详解类加载机制-JVM系列

JVM架构图「原|简」 JAVA中虚拟机的讲解,涉及「类加载机制,运行时区域,执行引擎,垃圾回收等」及对voliate, synchronized的JVM层面实现机制等。持续更新中…。 最新文章公众号持续更新中… 欢迎骚扰,分享技术,探讨生活, 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,本文主要讲解的就是架构原图的Class Loader SubSystem 「类装载系统」阶段,当然肯定涵盖常说的双亲委派模

qq_38862628的博客 231

jvm类加载机制详解

1、类加载过程 多个java文件经过编译打包生成可运行jar包,最终由java命令运行某个主类的main函数启 动程序,这里首先需要通过类加载器把主类加载到JVM。 主类在运行过程中如果使用到其它类,会逐步加载这些类。 注意,jar包里的类不是一次性全部加载的,是使用到时才加载。 类加载到使用整个过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 &gt...

qq_41843246的博客 542
上一篇: Spring框架核心技术解析
下一篇: JVM & Spring Boot知识体系
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值