千家信息网

Jvm类加载机制如何理解

发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,本篇文章给大家分享的是有关Jvm类加载机制如何理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是jvm平常我们编写代码都是编写的.
千家信息网最后更新 2025年02月22日Jvm类加载机制如何理解

本篇文章给大家分享的是有关Jvm类加载机制如何理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

什么是jvm

平常我们编写代码都是编写的.java文件,怎么部署到机器上运行呢?通过打jar包或者war包,然后部署运行。

如果看过jar包的内容那么就能知道,我们写的.java文件全部被编译成了.class文件。

这里发生了很重要的一个步骤--编译:将我们写的程序翻译成能被jvm读懂的文件格式。

值得注意的是,每一个类都会被编译成一个.class文件,包括内部类等。也就是说每一个.class文件都只对应我们代码中的一个类。

类的生命周期

类被加载到jvm虚拟机内存开始,到卸载出内存为止,他的生命周期可以分为:加载->验证->准备->解析->初始化->使用->卸载。


加载

当生成一个jar包以后,我们编写的程序就全部编编译成了jvm能读懂的.class格式。此时就需要加载了,将我们的编译好的.class文件加载到jvm中。此时就会有一个"类加载器"的概念。

接下来一个问题,类加载器何时会将一个.class加载带jvm?也就是说什么情况下会加载一个类?

一个jar包运行的时候会指定一个main()方法作为入口方法。首先就会将main()方法所在的类加载到jvm,当代码执行遇到new的时候又继续将该对象加载到jvm。

所以总结来说,就是在你的代码中需要用到这个类的时候,就会将其加载到jvm中。

验证

这个不需要理解的太深,很直白的道理,不能什么阿猫阿狗都能被加载到jvm中,要不就乱套了。所以该阶段就是来校验加载进来的.class文件是否符合指定的规则。

有一个很有趣的就是,每个.class文件都很浪漫,因为每一个.class文件都是以8个十六进制的 0×CAFEBABE,翻译过来就是咖啡宝贝。浪漫吧?在验证阶段的第一步就是检查.class文件是否以咖啡宝贝来开头的。

准备

当我们合法的把一个.class文件加载到jvm中后,此时就会进行一些准备工作。

首先为这个类分配内存空间,然后为类变量(被static修饰的变量)赋值一个默认的初始值。但是如果类变量同时被final修饰的话,就不是赋值初始值而是具体的值

用下面两种情况来说明:

public class Student{ private static int age = 18;}//此时就会为age变量分配内存空间并且为其赋值 0 这个初始值。

public class Student{ private static final int age = 18;}//age被final修饰,此时就会为age变量分配内存空间并且为其赋值为 18 。


解析解析阶段就是jvm将常量池的符号引用替换为直接引用。

简单的来说就是我们编写的代码中,当一个变量引用某个对象的时候,这个引用在.class文件中是以符号引用来存储的。在解析阶段就需要将其解析为直接引用。如果有了直接引用,那引用的目标必定已经在内存中存在。


初始化在准备阶段我们已经为加载到jvm的类分配了内存空间并且为类变量赋予了初始值。

而到了初始化阶段,才真正开始执行类中定义的java程序代码。

为类的静态变量赋予正确的初始值。

执行类的静态代码块。

按照顺序自上而下运行类中的变量赋值语句和静态语句,并且只有类或接口被Java程序首次主动使用时才初始化他们。如果有父类,则首先按照顺序运行父类中的变量赋值语句和静态语句。


在一个静态方法中我们是不能直接使用非静态变量的。当我们使用静态方法的时候,仅仅是初始化了静态方法所在的类,此时只有静态变量是被赋了值而非静态变量是没有被赋值的。所以在静态方法中是不能直接使用非静态变量的。

以上就是Jvm类加载机制如何理解,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

变量 文件 静态 就是 代码 内存 方法 阶段 时候 编译 运行 程序 空间 语句 准备 分配 验证 机制 浪漫 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州软件开发 聚顶科技好 苹果显示连接服务器时出了问题 云南正规软件开发价格信息 年网络安全宣传周海报 主机服务器数据库图 陕西蓝牙软件开发品牌 网络安全测试要求 网络技术报文 卢龙县委网络安全工作 阿里云服务器 安全狗 数据库技术应用前景概述 群晖作为打印服务器 上网行为管理服务器搭建 软件开发行业的企业管理 绿盟科技的网络安全产品 专升本复习资料网络技术 金蝶系统如何录取数据库 NEC服务器远程管理 浦东新区创新软件开发质量 数据库被锁怎么打开吗 电视认证服务器连接不上怎么办 可以配置数据库报表的网站源码 云服务器的安全性在线选购 济南计算机软件开发平台 大创论文要求什么数据库收录 如何通过服务器查看电脑数量 lol官网服务器炸了 静安区网络技术咨询服务 福建hp服务器虚拟化系统云空间 孤岛惊魂6联机服务器
0