首页 > 其他分享 >类加载器

类加载器

时间:2023-06-08 19:15:13浏览次数:32  
标签:初始化 变量 虚拟机 Platform class 加载

一、介绍

  实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。

二、作用

  负责将 .class 文件(存储的物理文件)加载到内存中

三、类加载的分类

  1. 分类

    Bootstrap class loader:虚拟机的内置类加载器,通常表示为 null,并且没有 父null

    Platform class loader:平台类加载器,负责加载 JDK 中一些特殊的模块

    System class loader:系统类加载器,负责加载用户类路径上所指定的类库

  2. 类加载器的继承关系

    System 的父加载器为 Platform

    Platform 的父加载器为 Bootstrap

四、类加载时机  用到就加载,不用不加载

  1. 创建类的的实例(对象)

  2. 调用类的类方法

  3. 访问类或者接口的类变量,或者为该类变量赋值

  4. 使用反射方式来强制创建某个类或接口对应的 java.lang.Class对象

  5. 初始化某个类的子类

  6. 直接使用 java.exe 命令来运行某个主类

五、类加载的过程

  1. 加载  (根据查找路径找到相应的 class 文件然后导入)

    通过包名 + 类名,获取这个类,准备用流进行传输

    在把这个类加载到内存中

    加载完毕创建一个 class 对象

  2. 链接

    (1)验证

      确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全

      (文件中的信息是否符合虚拟机规范有没有安全隐患)

    (2)准备

      负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值

      (初始化静态变量)

    (3)解析

      将类的二进制数据流中的符号引用替换为直接引用

      (本类中如果用到了其他类,此时就需要找到对应的类)

  3. 初始化

    根据程序员通过程序制定的主观计划去初始化类变量和其他资源

    (静态变量赋值以及初始化其他资源)

六、小结

  当一个类被使用的时候,才会加载到内存

  类加载的过程:加载、验证、准备、解析、初始化

标签:初始化,变量,虚拟机,Platform,class,加载
From: https://www.cnblogs.com/Rover20230226/p/17467394.html

相关文章

  • element-ui中Select 选择器异步加载下一页
    场景当我们使用Select选择器存放大量数据的时候。会发现存在这么2个问题。1.接口响应时间较长。(因为数据量较多,一次查询的所有)甚至有可能超时。2.前端下拉框滑动卡顿。这个时候们如何解决上面面临的问题呢?有的小伙伴可能会说:1.分页加载。确实是可以解决问题。2.页面卡顿......
  • 同一个服务需要使用同一个依赖(jar)的不同版本的解决方案(类加载器方案)
    当使用类加载器隔离来处理同一依赖的不同版本时,可以创建自定义的类加载器来加载各自的版本。以下是一个简单的示例,演示如何使用类加载器隔离不同版本的依赖://自定义类加载器publicclassCustomClassLoaderextendsClassLoader{privateStringjarPath;publicCus......
  • html照片从模糊到清晰的渐变加载显示方法
    1.背景介绍在网络相册应用中用户查看照片是最朴素的需求,当网络比较慢的时候查看照片等待的时间是比较长的,用户体验会很差。 2.现状现在加载照片的方法主要有一下两种:(1)最原始的方式在html页面直接用img标签加载显示照片。该方法在网络速度比较慢或者要显示的照片比较大的时候会......
  • jquery Mobile点击显示加载等待效果
    点击某个按钮或链接时,触发等待加载效果:<script><!--$(document).bind("mobileinit",function(){});$(function(){//默认设置,一个小圈圈在转$('#default').live('tap',function(){$.mobile.loadingMessageTe......
  • 使用GDB调试断点信息是gdb动态添加或取消的还是将断点烧录到elf文件的?断点信息是如何
    使用GDB调试断点信息是gdb动态添加或取消的还是将断点烧录到elf文件的?断点信息是如何加载进单片机的并进行加下来的调试运行的? from:GPT-4GDB(GNU调试器)是一个用于调试程序的强大工具,它可以让你设置断点、检查变量和内存、执行单步调试等。在单片机(微控制器)上使用GDB进行调试......
  • Java类加载机制
    <1>Javac原理javac是用于将源码文件.java编译成对应的字节码文件.class。其步骤是:源码——>词法分析器组件(生成token流)——>语法分析器组件(语法树)——>语义分析器组件(注解语法树)——>代码生成器组件(字节码)<2>类加载过程先在方法区找class信息,有的话直接调用,没有的话则使用类加......
  • 明明加载好了css,js文件,页面的样式还是不对的解决办法
    页面内容的格式乱七八糟的…用F12开发人员工具检查了一下,没有发现任何问题最后,求助了bobby老师答曰:你缺乏前端知识,浏览器中有缓存,ctrl+f5强制刷新一下就好了恩,好了…......
  • 如何实现Java类隔离加载?
    一什么是类隔离技术只要你Java代码写的足够多,就一定会出现这种情况:系统新引入了一个中间件的jar包,编译的时候一切正常,一运行就报错:java.lang.NoSuchMethodError,然后就哼哧哼哧的开始找解决方法,最后在几百个依赖包里面找的眼睛都快瞎了才找到冲突的jar,把问题解决之后就开始......
  • KingbaseES sys_bulkload数据加载工具错误处理
    一、关于sys_bulkload数据加载工具sys_bulkload是KingbaseES提供的快速加载数据的命令行工具。用户使用sys_bulkload工具能够把一定格式的文本数据简单、快速的加载到KingbaseES数据库中,或将KingbaseES数据库中的数据快速导出到CSV文件中。使用前需要用户手动创建sys_bulkload插......
  • Axure教程—滚动加载(中继器 )
    本文将教大家如何用AXURE中的中继器制作滚动加载效果一、效果介绍如图: 预览及下载地址:https://awjggr.axshare.com二、功能介绍向下滚动鼠标,自动加载内容三、制作方法1、中继器制作拖入一个动态面板组件,命名为1,设置大小为800×500,如图: 进入动态面板1,拖入另一个动态面板......