JVM的类加载机制

在JVM中一个类的生命周期包括了:加载、验证、准备、解析、初始化、使用、卸载7个阶段,其中验证、准备和解析统称为连接

加载

加载是第一阶段,因为此时的虚拟机中还没有class的相关信息,必须将class文件加载到虚拟机中才能进行接下来的操作。加载的过程主要分为以下3个步骤:

  • 根据类的全限定名取得类的二进制流

注意这里指定的是类的二进制流而不是说.class文件,由此可知这是个典型的面向接口编程呀,基于这个机制,我们可以把类放在任何地方。比如:在核心代码从数据库中获取、动态代理生成的类、JSP等其他文件转换

讲类的二进制流转化为方法区的运行时数据结构

在堆中生成类对应的java.lang.Class对象

验证

验证阶段所做的操作类似于我们的一个接口接收到外部的请求之后首先需要做的事

  • 首先是格式验证

    • 文件是否以魔数0xCAFEBABE开头

    • 文件的版本号是否在当前虚拟机可处理的范围内

    • 常量池中的常量是否有不支持的常量

    • 等其他关于文件是否正确的验证

  • 接着是逻辑验证

    • 这个类是否有父类

    • 继承的父类是否是不允许被继承的,如final

    • 等其他是否符合Java语法规范的验证

  • 然后是安全性验证

    • 保证方法内的跳转语句不会跳转到方法外

    • 保证类型转换是有效的

    • 等其他可能危害虚拟机安全的验证

  • 最后是对引用内容验证

    • 引用的类是否存在

    • 对引用的类、方法、属性是否有权限访问

    • 等其他引用内容的验证

  

  准备

准备阶段主要是为类变量分配内存并且设置初始值。这里有两个需要注意的地方:

  • 类变量是指static变量

  • 设置初始值是设置当前数据类型的零值,例如当前存在以下两个变量:

static int a=1	
static long b=2

它们的初始值其实是这样的:

a=0	
b=0L

而final类型的变量则没有这一步骤,设置初始值的时候跳过零值设置初始值

    

  解析

解析阶段主要是将符合引用替换为直接引用

  • 符合引用是使用一组符合来描述所引用的目标,简单来说是一个假的地址,引用的目标可能还没加载到内存中

  • 直接引用则是一个直接指向目标的指针,真实的地址

解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用

    

初始化

初始化阶段主要是为类的静态变量(准备阶段涉及的变量)赋予正确的初始值

这里需要注意的是,初始化阶段不是紧跟着解析进行的,而是当对类的主动使用才引起的类的初始化。以下几种情况会引起类的初始化:

  • new关键字

  • static变量的get、set(final类型的不算)

  • static方法的调用

  • 执行构造方法

  • 反射

  • 初始化子类时会首先初始化父类

  • 被标示为启动类的类(Main方法所在的类)

 

 

640?wx_fmt=jpeg

万水千山总是情,点个 “在看” 行不行!!!

640?wx_fmt=png 

**项目名称:** 基于Vue.js与Spring Cloud架构的博客系统设计与开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学与技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术栈:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术栈:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存与会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署与运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户与内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发与部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡与熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值