首页 > 其他分享 >JVM 类加载机制

JVM 类加载机制

时间:2023-06-26 23:46:27浏览次数:38  
标签:初始化 变量 虚拟机 JVM 机制 父类 Class 加载

加载过程

其中验证,准备,解析合称链接
加载通过类的完全限定名,查找此类字节码文件,利用字节码文件创建Class对象.
验证确保Class文件符合当前虚拟机的要求,不会危害到虚拟机自身安全.
准备进行内存分配,为static修饰的类变量分配内存,并设置初始值(0或null).不包含final修饰的静态变量,因为final变量在编译时分配.
解析将常量池中的符号引用替换为直接引用的过程.直接引用为直接指向目标的指针或者相对偏移量等.
初始化主要完成静态块执行以及静态变量的赋值.先初始化父类,再初始化当前类.只有对类主动使用时才会初始化.

触发条件包括,创建类的实例时,访问类的静态方法或静态变量的时候,使用Class.forName反射类的时候,或者某个子类初始化的时候.
Java自带的加载器加载的类,在虚拟机的生命周期中是不会被卸载的,只有用户自定义的加载器加载的类才可以被卸.

加载机制-双亲委派模式

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


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

 

标签:初始化,变量,虚拟机,JVM,机制,父类,Class,加载
From: https://www.cnblogs.com/huigui-mint/p/17507469.html

相关文章

  • SpringBoot事件机制
    1、是什么?SpringBoot事件机制是指SpringBoot中的开发人员可以通过编写自定义事件来对应用程序进行事件处理。我们可以创建自己的事件类,并在应用程序中注册这些事件,当事件被触发时,可以对其进行处理。在SpringBoot中,事件可以是任意类型的,可以是基于Spring的事件,也可以是自定义的事......
  • 【Vue】Vue3+Vite 实现 SVG 组件自动加载 icons 目录下所有文件
    1.安装依赖插件vite-plugin-svg-iconsvite-plugin-svg-icons用于生成svg雪碧图。特点:1.预加载在项目运行时就生成所有图标,只需操作一次dom2.高性能内置缓存,仅当文件被修改时才会重新生成vite-plugin-svg-icons官方文档pnpmaddvite-plugin-svg-icons2.安装......
  • JQ 自动加载页面
    demo.html<listyle="opacity:0;-moz-opacity:0;filter:alpha(opacity=0);"><p>---------------</p></li><listyle="opacity:0;-moz-opacity:0;filter:alpha(opacity=0);"><p>阅谁问君诵,水落清香浮</p></li>......
  • PyTorch 从入门到放弃 —— 加载数据
    PyTorch有两种基础数据类型: torch.utils.data.DataLoader 和 torch.utils.data.Dataset. Dataset,它们存储着样本和对应的标记。 Dataset是样本数据集,DataLoader对Dataset进行封装,方便加载、遍历和分批等。importtorchfromtorchimportnnfromtorch.utils.dataimport......
  • web前端性能优化之资源文件加载优化
    前言首屏速度是用户体验的最关键一环,而首屏速度最大的决定性因数就是资源的加载速度而资源的加载速度=资源大小+网速资源大小影响的方面有1、压缩(如Gzip)2、一部分代码分割出来做异步加载,需要的时候在加载3、写代码的时候尽量精简本文主要针对,资源文件加载的优化。异步资......
  • 类加载
    ​类加载到jvm中的过程java.exe调用dll文件创建java虚拟机创建引导类加载器,sun.mis.Launcher创建其他类加载器获取运行类自己的加载器,加载class文件(从具体位置读取)调用main方法jvm销毁初始化launcherpublicLauncher(){ //初始化两个类加载器,ExtClassLoader为单例......
  • ESP(EFI System Partition)分区是UEFI固件中的一个特殊分区,通常位于硬盘上的第一个分区,
    ESP(EFISystemPartition)分区是UEFI固件中的一个特殊分区,通常位于硬盘上的第一个分区,用于存储引导加载程序、UEFI应用程序和其他与系统启动相关的文件。ESP分区使用FAT32文件系统,并拥有特定的分区类型GUID(GUIDPartitionTable,GPT)。ESP分区的主要作用是提供一个可被UEFI固件直接......
  • GRUB(GNU GRand Unified Bootloader)是一个常用的引导加载程序,用于在计算机启动时加载操
    GRUB(GNUGRandUnifiedBootloader)是一个常用的引导加载程序,用于在计算机启动时加载操作系统。它是开源软件,由GNU项目开发并得到广泛应用。GRUB主要有两个版本:GRUBLegacy和GRUB2。GRUB2是较新的版本,也是目前更常用和推荐的版本。下面主要介绍GRUB2的特点和功能:多操作系统支......
  • 关于.net4.0使用WhenAny实现Task超时机制
    .net4.0想要使用await/async语法糖必须要引用:Microsoft.BclMicrosoft.Bcl.Async Microsoft.Bcl.Build可以从nuget引用此三个包publicstaticasyncTask<TResult>TryRunWithTimeoutAsync<TResult>(thisFunc<TResult>function,intdueTime){//......
  • EFI分区(也称为EFI系统分区或ESP)是一种特殊的分区,通常用于存储引导加载程序和其他与引
    EFI分区(也称为EFI系统分区或ESP)是一种特殊的分区,通常用于存储引导加载程序和其他与引导相关的文件。它是为了支持基于UEFI(统一固件接口)的系统而设计的。下面是一些理由说明为什么需要EFI分区:引导启动:EFI分区中存储着操作系统的引导加载程序(如GRUB、WindowsBootManager等)和相关......