详解JVM类加载

从类被加载到虚拟机内存中开始,到释放内存总共有7个步骤:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、 卸载(Unloading)。其中验证,准备,解析三个部分统称为连接。

相关:JVM-1-CSDN博客

加载:

通过类的完全限定名,查找此类字节码文件,利用字节码文件创建Class对象

  1. 通过一个类的全限定名来获取定义此类的二进制字节流
  2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
  3. 在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口

在Java中,通过类的完全限定名加载类字节码文件时,会根据类加载器的规则进行查找。类加载器负责定位和加载类的字节码文件,它可以根据特定的策略在不同的位置进行搜索。
在Java中,有以下几种类加载器:
1.启动类加载器(Bootstrap Class Loader):这是Java虚拟机的一部分,负责加载Java核心类库,如java.lang包中的类。它是用本地代码实现的,不继承自java.lang.ClassLoader
2.扩展类加载器(Extension Class Loader):它负责加载Java扩展库,位于<JAVA HOME>/lib/ext目录下的JAR文件。它是由sun.misc.Launcher$ExtClassLoader实现的,是java.lang.ClassLoader的子类。
3.应用程序类加载器(Application Class Loader):也称为系统类加载器(System ClassLoader),它负责加载应用程序的类,包括用户自定义的类和第三方类库。它是由sun.misc.Launcher$AppClassLoader实现的,同样是java.lang.ClassLoader的子类


当使用类的完全限定类,名记载类字节码文件时,类加载器,会按照以下顺序进行查找:

1.首先,由启动类加载器尝试加载。启动类加载器只加载Java核心类库,无法加载应用程序的类。
2.如果启动类加载器无法加载该类,则由扩展类加载器尝试加载。它会搜索Java扩展库中的类。
3.如果扩展类加载器也无法加载该类,则由应用程序类加载器尝试加载。它会搜索应用程序的类路径(classpath)下的类。
4.如果应用程序类加载器仍然无法加载该类,则会抛出ClassNotFoundException异常,表示无法找到该类。
但因为存在双亲委派机制,所以在类加载器加载类时(双亲委派规则在应用程序类加载器和扩展类加载器尝试加载类时起作用):

1.当应用程序类加载器或扩展类加载器需要加载一个类时,它们首先会将加载请求委派给父类加载器。
2.父类加载器会按照相同的方式尝试加载该类。如果父加载器能够成功加载该类,那么加载过程结束,类被返回给子加载器。
3.如果父加载器无法加载该类,则子加载器会尝试自己加载。如果子加载器能够成功加载该类,加载过程结束。
4.如果子加载器仍然无法加载该类,它会将加载请求再次委派给父加载器的父加载器(即更上一级的加载器)。这个过程会一直循环进行,直到达到启动类加载器。

5.如果启动类加载器仍然无法加载该类,系统会抛出ClassNotFoundException异常,表示无法找到该类。

双亲委派机制:

即加载器加载类时先把请求委托给自己的父类加载器执行,直到顶层的启动类加载器父类加载器能够完成加载则成功返回,不能则子类加载器才自己尝试加载

优点:
1.避免类的重复加载
2. 避免Java的核心API被篡改

为什么将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构?

  1. 内存管理:方法区是Java虚拟机用于存储类信息、常量、静态变量等数据的区域。通过将字节码转化为方法区的运行时数据结构,可以更好地管理内存,有效地组织和存储类相关的数据。

  2. 动态链接:在类加载过程中,Java虚拟机会进行符号引用到直接引用的解析。这包括将类、方法、字段等符号引用转化为方法区中的直接引用,以便在运行时进行动态链接和方法调用。

  3. 运行时执行:将字节码转化为方法区的运行时数据结构后,可以更方便地对类进行解析、验证和初始化。这样,在程序运行时,Java虚拟机可以更高效地执行方法区中的代码,提高执行性能。

  4. 共享数据:方法区是所有线程共享的区域,存储着类的元数据信息和静态变量。通过将字节码转化为方法区的运行时数据结构,可以确保这些共享数据在内存中只有一份拷贝,节省内存空间。


其中,之所以要创建Class对象,是因为java.lang.Class对象是Java反射机制的核心。

这个可以看一下java中面向对象的一项重要原则:封装

封装是将数据和操作数据的方法组合在一起,形成一个称为类(Class)的单元。封装通过将数据隐藏在类的内部,只暴露必要的接口方法来实现。

就比如我们创建一个对象时:

public class Person {private String name;private int age;public String getName() {return name;}public void setName(String newName) {name = newName;}public int getAge() {return age;}public void setAge(int newAge) {if (newAge >= 0) {age = newAge;}}
}

在这个示例中,name和age字段被声明为私有的,外部代码无法直接访问它们。通过公共的getName和setName方法以及getAge和setAge方法,外部代码可以间接地访问和修改这些字段的值。在setAge方法中,还添加了对年龄值的非负检查,以确保数据的完整性。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang学习笔记(net/http库基本使用)

关于net/http库 我们先看看标准库net/http如何处理一个请求。 import ("fmt""log""net/http" )var count 0func main() {http.HandleFunc("/", handler)http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServ…

cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间

问题 在shell输入命令按tab键时出现以下报错 (base) [link999hadoop102 ~]$ cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间 -bash: cd: /op: 没有那个文件或目录原因分析 磁盘空间不够 df -Th # 通过命令查看具体情况解决 1、清理大文件 进入到 容量-已用 使…

使用easyexcel将csv转为excel

一.背景 供应商系统下载的csv文件不支持域控&#xff08;主要是第三方wps服务不能对csv文件加密&#xff0c;但是可以对office系列产品进行权限访问的加密控制&#xff09;。因此思路就改为现将csv文件转为excel文件&#xff0c;然后对excel文件进行加域控制。本文主要介绍如何…

12.Hexo helpers类似函数和data folder数据文件夹

helper Hexo里的helper&#xff0c;或者说是函数 基本上就是小函数&#xff0c;可以在layout布局中使用&#xff0c;可以允许做一些事情 如字符串操作、检查true或false、检查是否在一个页面上、打印出某个页面中的日期或时间特定格式 打开index.ejs trim 可以通过 <%…

向量数据库的崛起:如何改变数据存储与机器学习的未来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

ExpertPrompting:指导大语言模型成为杰出专家

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 论文地址&#xff1a;https://arxiv.org/abs/2305.14688 作者 & 机构&#xff1a;Benfen…

Linux嵌入式驱动开发-阻塞IO与非阻塞IO

文章目录 阻塞与非阻塞访问简介阻塞访问的实现等待队列等待队列头等待队列项从等待队列头添加/移除等待队列项等待唤醒等待事件API 非阻塞访问的实现轮询poll 函数原型可以返回的资源状态 阻塞与非阻塞访问简介 **IO&#xff1a;**Input/Output&#xff0c;也就是输入/输出&am…

Mysql学习大纲

文章目录 整体大纲总结 整体大纲 大纲 MySQL在金融互联网行业的企业级安装部署mysql启动关闭原理和实战&#xff0c;及常见错误排查 花钱9.9 订阅了专栏MySQL字符集和校对规则史上最详细的Mysql用户权原理和实战&#xff0c;生产案例InnoDB引擎原理和实战&#xff0c;通俗易懂…

IoT、IIoT、AIoT的区别是什么?

一、IoT、IIoT、AIoT的区别是什么&#xff1f; IoT、IIoT和AIoT都是物联网&#xff08;Internet of Things&#xff09;的不同应用和发展方向&#xff0c;但它们之间存在一些区别。 IoT&#xff08;物联网&#xff09;&#xff1a;物联网是指通过互联网连接各种物理设备&#x…

【Linux】小知识点温习---命令

许多常见命令会用&#xff0c;但是很少注意他们的区别&#xff1b;亦或在学习中使用较少&#xff0c;容易忘记&#xff0c;今天做一个回顾。 ls系列 -a:显示所有文件&#xff08;包括隐藏文件&#xff09; -l:将文件以竖列形式显示 -i&#xff1a;显示文件的inode编号 pwd 显…

MacOS 文件系统种类及介绍

MacOS 文件系统种类 详细介绍 详细介绍 从图片中我们可以看到一个文件系统选择器的界面&#xff0c;列出了多种不同的文件系统选项。这些文件系统各有其特点和用途&#xff0c;以下是它们之间的主要区别&#xff1a; APFS&#xff1a;Apple File System&#xff0c;是苹果公司为…

车载电子电器架构 —— 功能安全开发(首篇)

车载电子电器架构 —— 功能安全开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

江西智博环境| 邀您参加2024全国水科技大会暨技术装备成果展览会

展位号&#xff1a;A28 企业介绍 江西智博环境技术有限公司始创于2008年初&#xff0c;总部位于江西省域副中心城市-赣州。公司主要从事一体化净水设备、单村供站、泵船、无负压供水设备自动化控制系统、低配电系统、工艺设备及智慧水务的设计研发、生产、销售、安装、调试等业…

WordPress SQLite Docker 镜像封装细节

为了让大家用的放心&#xff0c;同时解答 GitHub 社区中的疑问。这篇文章聊聊上一篇文章的 Docker 容器封装细节。 写在前面 在前一篇文章《WordPress 告别 MySQL&#xff1a;Docker SQLite WordPress》中&#xff0c;如果你跟着文章实践&#xff0c;大概三分钟就能够启动一个…

【批量区域识别内容重命名】批量识别图片区域文字并重命名,批量图片部分识别内容重命文件,PDF区域识别提取重命名

我们在工作和生活中经常遇到这样的需求&#xff1a;比如将以下的图片区域识别进行重命名&#xff0c;批量识别后改成以时间和工作内容重命名&#xff0c;便于日后检索&#xff0c;快速查询 首先我们拍摄照片用到的是水印相机&#xff0c;这里的文字呢我们需要加个背景&#xff…

华为机考入门python3--(16)牛客16-购物单最大满意度

分类&#xff1a;动态规划&#xff0c;组合&#xff0c;最大值&#xff0c;装箱问题 知识点&#xff1a; 生成递减数 100, 90, 80, ..., 0 range(100, -1, -10) 访问列表的下标key for key, value in enumerate(my_list): 动态规划-捆绑装箱问题 a. 把有捆绑约束的物…

AI大模型日报#0421:「个性化」图像Gen4Gen框架、吴恩达亲授智能体设计模式、国内14大LLM最新评测报告

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: 小冰徐元春&#xff1a;AIGC已经让普通人开始赚钱 | 中国AIGC产业峰会 摘要: 要点提炼&#xff1a; 在中国AIGC产业峰会上&…

Llama 3大模型发布!快速体验推理及微调

Meta&#xff0c;一家全球知名的科技和社交媒体巨头&#xff0c;在其官方网站上正式宣布了一款开源的大型预训练语言模型——Llama-3。 据了解&#xff0c;Llama-3模型提供了两种不同参数规模的版本&#xff0c;分别是80亿参数和700亿参数。这两种版本分别针对基础的预训练任务…

2024mac苹果电脑如何清理磁盘空间?用什么软件最好

苹果电脑已成为我们日常生活和工作不可或缺的一部分。随着时间的推移&#xff0c;不论是办公文档、个人照片还是各式各样的应用程序&#xff0c;都会逐渐积累&#xff0c;导致电脑的磁盘空间日益紧张。对于用户来说&#xff0c;苹果电脑如何清理磁盘空间&#xff0c;以保持设备…

【2024年最新】NodeMCU-ESP8266刷AT固件教程——适用于esp-12E和esp-12F

硬件图片 原理图 0、工具打包下载 工具包 密码:keduo 1、工具及固件下载 固件下载地址&#xff1a; 欢迎 | 安信可科技 (ai-thinker.com) 下载以下固件&#xff1a; 直接下载地址&#xff1a;AT 固件&#xff08;固件号&#xff1a;0781&#xff09; 下载以下工具&#xf…