当前位置: 首页 > news >正文

类加载过程

基本说明

反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载。

  1. 静态加载:编译时加载相关的类,如果没有则报错,依赖性太强
  2. 动态加载:运行时加载需要的类,如果运行时不用该类,即使不存在该类,也不会报错,降低了依赖性。

类加载时机

  1. 当创建对象时(new)  //静态加载
  2. 当子类被加载时,父类也加载  //静态加库
  3. 调用类中的静态成员时  //静态加载
  4. 通过反射  //动态加载

类加载过程

加载阶段

JVM在该阶段的主要目的是将字节码从不同的数据源(可能是 class文件、也可能是 jar包,甚至网络)转化为二进制字节流加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象。

链接阶段

  1. 验证:(1)、目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求。并且不会会危害虚拟机自身的安全。(2)、包括:文件格式验证(是否以魔数 oxcafebabe开头)、元数据验证、字节码验证和符号引用验证。(3)、可以考虑使用 -Xverify:none 参数来关闭大部分的类验证措施,缩短虚拟机类加载的时间。
  2. 准备:JVM会在该阶段对静态变量,分配内存并默认初始化(对应数据类型的默认初始值,如0、OL、null、false等)。这些变量所使用的内存都将在方法区中进行分配。
  3. 解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程。

初始化阶段

  1. 到初始化阶段,才真正开始执行类中定义的Java程序代码,此阶段是执行<clinit>() 方法的过程。
  2. <clinit>() 方法是由编译器按语句在源文件中出现的顺序,依次自动收集类中的所有静态变量的赋值动作和静态代码块中的语句,并进行合并。
  3. 虚拟机会保证一个类的<clinit>() 方法在多线程环境中被正确地加锁、同步,如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的<clinit>() 方法,其他线程都需要阻塞等待,直到活动线程执行<clinit>() 方法完毕

相关文章:

类加载过程

基本说明 反射机制是Java实现动态语言的关键&#xff0c;也就是通过反射实现类动态加载。 静态加载&#xff1a;编译时加载相关的类&#xff0c;如果没有则报错&#xff0c;依赖性太强动态加载&#xff1a;运行时加载需要的类&#xff0c;如果运行时不用该类&#xff0c;即使…...

【C/C++】C++11 无序关联容器的诞生背景

文章目录 背景无序关联容器适用场景有序关联容器适用场景 背景 C11 引入了无序关联容器&#xff08;unordered_map、unordered_set、unordered_multimap 和 unordered_multiset&#xff09;是为了提供一种高效的元素存储和查找方式。相比于有序关联容器&#xff08;map、set、…...

h264编码原理

在介绍编码器原理之前首先了解三个制定编码标准的组织&#xff1a; 1.国际电信联盟(ITU-T)&#xff0c;这是一个音视频领域非常强的组织&#xff0c;规定了很多标准如h261&#xff0c;h262&#xff0c;h263&#xff0c;h263。h263也就是h264的前身。 2.国际标准化组织(ISO)&…...

网络工程师经常搞混的路由策略和策略路由,两者到底有啥区别?

当涉及到网络路由时&#xff0c;两个术语经常被混淆&#xff1a;策略路由和路由策略。虽然这些术语听起来很相似&#xff0c;但它们实际上有着不同的含义和用途。在本文中&#xff0c;我们将详细介绍这两个术语的区别和应用。 一、路由策略 路由策略是指一组规则&#xff0c;用…...

高精度气象模拟软件WRF实践技术

【原文链接】&#xff1a;高精度气象模拟软件WRF(Weather Research Forecasting)实践技术及案例应用https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247538149&idx3&sn3890c3b29f34bcb07678a9dd4b9947b2&chksmfe68938fc91f1a99bbced2113b09cad822711e7f…...

总结827

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 高等数学&#xff1a;刷1800&#xff0c;做了26道计算题&#xff0c;记录两道错题&#xff0c;搞懂了&#xff0c;但并不…...

还在发愁项目去哪找?软件测试企业级Web自动化测试实战项目

今天给大家分享一个简单易操作的实战项目&#xff08;已开源&#xff09; 项目名称 ET开源商场系统 项目描述 ETshop是一个电子商务B2C电商平台系统&#xff0c;功能强大&#xff0c;安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城…...

总结下Spring boot异步执行逻辑的几种方式

文章目录 概念实现方式Thread说明 Async注解说明 线程池CompletableFuture&#xff08;Future及FutureTask&#xff09;创建CompletableFuture异步执行 消息队列 概念 异步执行模式&#xff1a;是指语句在异步执行模式下&#xff0c;各语句执行结束的顺序与语句执行开始的顺序…...

【开发日志】2023.04 ZENO----Composite----CompNormalMap

NormalMap-Online (cpetry.github.io)https://cpetry.github.io/NormalMap-Online/ CompNormalMap 将灰度图像转换为法线贴图 将灰度图像转换为法线贴图是一种常见的技术&#xff0c;用于在实时图形渲染中增加表面细节。下面是一个简单的方法来将灰度图像转换为法线贴图&…...

春秋云境:CVE-2022-28525 (文件上传漏洞)

目录 一、题目 1.登录 2.burp抓包改包 3.蚁剑获取flag 一、题目 ED01CMSv20180505存在任意文件上传漏洞 英语不够 翻译来凑&#xff1a; 点击其他页面会Not Found 找不到&#xff1a; 先登录看看吧&#xff1a; 试试万能密码&#xff1a;admin&#xff1a;123 发现错误…...

【软件测试二】开发模型和测试模型,BUG概念篇

目录 1.软件的生命周期 2.瀑布模型 3.螺旋模型 4.增量&#xff0c;迭代 5.敏捷---scrum 1. 敏捷宣言 2.角色 6. 软件测试v模型 7.软件测试w模型 8.软件测试的生命周期 9.如何描述一个BUG 10.如何定义BUG的级别 11.BUG的生命周期 12.产生争执怎么办 1.软件的生命周期…...

短视频app开发:如何实现视频直播功能

短视频源码的实现 在短视频app开发中&#xff0c;实现视频直播功能需要借助短视频源码。短视频源码可以提供一个完整的视频直播功能模块&#xff0c;包括视频采集、编码、推流等。因此&#xff0c;我们可以选择一些开源的短视频源码&#xff0c;例如LFLiveKit、ijkplayer等&am…...

[架构之路-174]-《软考-系统分析师》-5-数据库系统-7-数据仓库技术与数据挖掘技术

5 . 7 数据仓库技术 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。近年来&#xff0c;人们对数据仓库技术的关注程度越来越尚&#xff0c;其原因是过去的几十年中&#xff0c;建设了无数的应用系统&#xff0c;积累了…...

销售高品质 FKM EPDM NBR 硅胶 O 形密封圈

O形圈常用于各种行业&#xff0c;包括汽车、航空航天和制造业。它们是由不同材料制成的圆环&#xff0c;用于将两个或多个组件密封在一起。用于制造O形圈的材料是决定其有效性和耐用性的重要因素。在本文中&#xff0c;我们将讨论用于制作O形圈的不同类型的材料。 1.丁腈橡胶(…...

Linux环境变量:不可或缺的系统组成部分

目录标题 引言&#xff08;Introduction&#xff09;Linux环境变量的概念&#xff08;Concept of Linux Environment Variables&#xff09;环境变量的作用与重要性&#xff08;Roles and Importance of Environment Variables&#xff09; Linux环境变量基础&#xff08;Linux…...

FFmpeg命令行解析

目录标题 一、引言&#xff08;Introduction&#xff09;1.1 FFmpeg简介&#xff08;Overview of FFmpeg&#xff09;1.2 FFmpeg命令行的应用场景&#xff08;Application Scenarios of FFmpeg Command Line&#xff09; 二、FFmpeg命令行基础&#xff08;FFmpeg Command Line …...

机器学习——为什么逻辑斯特回归(logistic regression)是线性模型

问&#xff1a;逻辑斯蒂回归是一种典型的线性回归模型。 答&#xff1a;正确。逻辑斯蒂回归是一种典型的线性回归模型。它通过将线性回归模型的输出结果映射到[0,1]区间内&#xff0c;表示某个事物发生的概率&#xff0c;从而适用于二分类问题。具体地说&#xff0c;它使用sig…...

从输入URL到页面展示到底发生了什么

刚开始写这篇文章还是挺纠结的&#xff0c;因为网上搜索“从输入url到页面展示到底发生了什么”&#xff0c;你可以搜到一大堆的资料。而且面试这道题基本是必考题&#xff0c;二月份面试的时候&#xff0c;虽然知道这个过程发生了什么&#xff0c;不过当面试官一步步追问下去的…...

Qt connect传参方式及lambda函数传参方式详解

Qt connect传参方式及lambda函数传参方式详解 Qt是一种流行的跨平台C应用程序框架&#xff0c;它提供了许多有用的工具和函数来帮助开发人员构建高效的图形用户界面和其他应用程序。其中&#xff0c;Qt Connect函数是用于连接信号和槽的重要函数之一&#xff0c;它可以在Qt应用…...

如何在硬盘上恢复已经删除的照片?

可以从硬盘恢复删除的照片吗&#xff1f; 旅行后&#xff0c;许多人倾向于将照片保存到另一个储存设备作为副本或备份。例如&#xff0c;将它们存储在外部硬盘上或将图片传输到电脑。但是在整理照片的时候&#xff0c;很可能不小心把照片删掉了&#xff0c;尤其是使用外接硬…...

别再只会用Burpsuite了!手把手教你用Python脚本+Crunch字典搞定DVWA暴力破解

从零构建Python自动化爆破工具&#xff1a;DVWA全等级攻防实战解析 在渗透测试领域&#xff0c;暴力破解(Brute Force)始终是验证系统弱口令防御的基础手段。虽然Burpsuite这类图形化工具降低了入门门槛&#xff0c;但真正理解底层通信原理并构建自定义攻击脚本&#xff0c;才是…...

Anything-v5模型微调启示:Pixel Fashion Atelier对动漫风格像素化表达的重构

Anything-v5模型微调启示&#xff1a;Pixel Fashion Atelier对动漫风格像素化表达的重构 1. 项目背景与设计理念 Pixel Fashion Atelier是一个创新的图像生成工作站&#xff0c;它巧妙融合了Stable Diffusion的强大生成能力与Anything-v5模型对动漫风格的精准把控。这个项目最…...

语音转文字工具推荐:FireRedASR Pro实测,识别准确率超高

语音转文字工具推荐&#xff1a;FireRedASR Pro实测&#xff0c;识别准确率超高 1. 为什么我们需要专业的语音转文字工具&#xff1f; 在日常工作和学习中&#xff0c;语音转文字的需求无处不在。从会议记录到采访整理&#xff0c;从课程笔记到灵感记录&#xff0c;手动转录不…...

OpenClaw安全加固:Qwen3.5-4B-Claude操作权限精细化控制

OpenClaw安全加固&#xff1a;Qwen3.5-4B-Claude操作权限精细化控制 1. 为什么需要权限控制&#xff1f; 上周我在调试OpenClaw自动化脚本时&#xff0c;差点酿成一场"灾难"——AI助手误将我的工作文档识别为临时文件&#xff0c;准备执行删除操作。幸亏当时设置了…...

旧设备重生:如何让经典iOS设备突破系统限制重获新生?

旧设备重生&#xff1a;如何让经典iOS设备突破系统限制重获新生&#xff1f; 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...

平面六杆机构的运动仿真(毕业论文+CAD图纸+开题报告+外文翻译)

平面六杆机构作为机械传动领域的重要构件&#xff0c;其运动特性直接影响机械系统的整体性能。该机构由六个刚性杆件通过转动副或移动副连接形成闭合环路&#xff0c;通过调整杆长比例与铰链位置&#xff0c;可实现复杂轨迹输出与多自由度运动控制。相较于四杆机构&#xff0c;…...

STEP3-VL-10B实战案例:科研论文截图→公式识别→LaTeX还原→语义解释生成

STEP3-VL-10B实战案例&#xff1a;科研论文截图→公式识别→LaTeX还原→语义解释生成 1. 引言&#xff1a;当科研遇上多模态AI 如果你经常需要阅读英文论文&#xff0c;特别是那些数学、物理、计算机科学领域的文章&#xff0c;一定遇到过这样的困扰&#xff1a;论文里密密麻…...

手把手教学:如何在本地运行ChatGLM3-6B对话模型

手把手教学&#xff1a;如何在本地运行ChatGLM3-6B对话模型 1. 项目简介 你是否曾经遇到过这样的情况&#xff1a;想用AI助手帮忙写代码、分析文档或者只是聊聊天&#xff0c;但云端服务要么响应慢&#xff0c;要么担心隐私泄露&#xff1f;今天我要介绍的ChatGLM3-6B本地部署…...

保姆级教程:手把手教你用Xinference-v1.17.1在Jupyter里玩转开源大模型

保姆级教程&#xff1a;手把手教你用Xinference-v1.17.1在Jupyter里玩转开源大模型 1. 为什么选择Xinference&#xff1f; 1.1 什么是Xinference&#xff1f; Xinference&#xff08;Xorbits Inference&#xff09;是一个开源平台&#xff0c;它让运行各种AI模型变得像调用P…...

M2LOrder模型跨操作系统部署:从Windows到Linux的兼容性实战

M2LOrder模型跨操作系统部署&#xff1a;从Windows到Linux的兼容性实战 你是不是也遇到过这种情况&#xff1f;在Windows电脑上跑得好好的一个AI服务&#xff0c;想迁移到Linux服务器上&#xff0c;结果各种报错&#xff0c;环境依赖、路径问题、权限设置……折腾半天也搞不定…...