java类加载机制

这篇具有很好参考价值的文章主要介绍了java类加载机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简述java类加载机制?

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初 始化,最终形成可以被

虚拟机直接使用的java类型。

描述一下JVM加载Class文件的原理机制

Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也 是一个类,而它的工作就

是把class文件从硬盘读取到内存中。在写程序的时 候,我们几乎不需要关心类的加载,因为这些都是隐

式装载的,除非我们有特殊 的用法,像是反射,就需要显式的加载所需要的类。

类装载方式,有两种 :

1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用 类装载器加载对应的类到

jvm中,

2.显式装载, 通过class.forname() 等方法,显式加载需要的类

Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证 程序运行的基础类(像是

基类)完全加载到jvm中,至于其他类,则在需要的时候 才加载。这当然就是为了节省内存开销。

什么是类加载器,类加载器有哪些?

实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。 主要有一下四种类加载器:

1. 启动类加载器(Bootstrap ClassLoader)用来加载java核心类库,无法被 java程序直接引用。

2. 扩展类加载器(extensions class loader): 它用来加载 Java 的扩展库。 Java 虚拟机的实现会提供一

个扩展库目录。该类加载器在此目录里面查找 并加载 Java 类。

3. 系统类加载器(system class loader ):它根据 Java 应用的类路径 (CLASSPATH )来加载 Java

类。一般来说,Java 应用的类都是由它来 完成加载的。可以通过

ClassLoader.getSystemClassLoader()来获取 它。

4. 用户自定义类加载器,通过继承 java.lang.ClassLoader类的方式实

现。

说一下类装载的执行过程?

类装载分为以下 5个步骤:

加载:根据查找路径找到相应的 class 文件然后导入;

验证:检查加载的 class 文件的正确性;准备:给类中的静态变量分配内存空间;

解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为 一个标示,而在直接引

用直接指向内存中的地址;

初始化:对静态变量和静态代码块执行初始化工作。

什么是双亲委派模型?

在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的 类加载器和这个类本身

一同确立在 JVM 中的唯一性,每一个类加载器,都有一 个独立的类名称空间。类加载器就是根据指定全

限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。

类加载器分类:

启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载 Java_HOME/lib/

录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚 拟机识别的类库;

其他类加载器:

扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或Java. ext. dirs系统变量指

定的路径中的所有类库;

应用程序类加载器(Application ClassLoader)。负责加载用户类路径 (classpath)上的指

定类库,我们可以直接使用这个类加载器。一般情况,如果我 们没有自定义类加载器默认就

是用这个加载器。

双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载 这个类,而是把这个请

求委派给父类加载器去完成,每一层的类加载器都是如 此,这样所有的加载请求都会被传送到顶层的启

动类加载器中,只有当父加载无 法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会

尝试去加 载类。当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父 类,由父类去加载,如果

此时父类不能加载,反馈给子类,由子类去完成类的加 载。 文章来源地址https://www.toymoban.com/news/detail-446515.html

到了这里,关于java类加载机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java类加载机制

    简述 java 类加载机制 ? 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验,解析和初 始化,最终形成可以被 虚拟机直接使用的 java 类型。 描述一下 JVM 加载 Class 文件的原理机制 Java 中的所有类,都需要由类加载器装载到 JVM 中才能运行。类加载器本身也 是一

    2024年02月05日
    浏览(20)
  • JVM:Java类加载机制

            加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类型的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始, 这是为了支持Java语言的运行时绑定特性(也称为动态绑定或晚期绑定)。

    2024年01月21日
    浏览(36)
  • 【Java】深入了解双亲委派机制(常说的类加载机制)

    ava虚拟机(JVM)的类加载机制是Java应用中不可或缺的一部分。本文将详细介绍JVM的双亲委派机制,并阐述各关键点。 双亲委派机制(Parent-Delegate Model)是Java类加载器中采用的一种类加载策略。该机制的核心思想是:如果一个类加载器收到了类加载请求,默认先将该请求委托

    2024年02月04日
    浏览(35)
  • java以及android类加载机制

    java中,每一个类或者接口,在编译后,都会生成一个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中并对数据进行校验,解析和初始化。最终,每一个类都会在方法去保存一份元数据,在堆中创建一个与之对应的Class对象。 类的生命周期,经历7个

    2024年02月20日
    浏览(30)
  • 【Jvm】Java类加载机制是什么?

    什么是类的加载? 类的生命周期? 类加载器是什么? 双亲委派机制是什么? JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数

    2024年02月11日
    浏览(39)
  • 【JAVA基础】JVM之类加载--双亲委派机制

    1. 类加载的过程 描述: 我们写的 .java 文件通过编译成字节码文件 .class 文件,然后再通过我们的类加载器:Class Loader,反射以后,类模板存在方法区,把实例化的对象存在堆里; 看图: 对象的hashcode值 解释: 从图中我们可以看出,从同一个类模板new出来三个对象(实例化

    2024年01月23日
    浏览(43)
  • 解析Java类加载的运行机制和双亲委派模型

    类加载形如把.class文件,加载到内存中,得到类对象这样的过程 类加载一共分为五个步骤: 加载 验证 准备 解析 初始化 加载 类加载的第一步是将编译好的 Java 类的字节码文件加载到 Java 虚拟机(JVM)中。类加载器会根据类的名称找到对应的字节码文件,并将其读取到内存

    2024年02月15日
    浏览(39)
  • 【Java】JVM执行流程、类加载过程和垃圾回收机制

    JVM,就是Java虚拟机,Java的的程序都是运行在JVM当中。 程序在执行之前先要把java源代码转换成字节码(class文件),JVM 首先需要把字节码通过一定的方(类加载器(ClassLoader)) 把文件加载到内存中的运行时数据区(Runtime Data Area) ,而字节码文件是 JVM 的一套指令集规范,并

    2024年02月16日
    浏览(48)
  • 【Java高级应用:深入探索Java编程的强大功能,JVM 类加载机制, JVM 内存模型,垃圾回收机制,JVM 字节码执行,异常处理机制】

    本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:

    2024年01月16日
    浏览(89)
  • 【Java系列】Java虚拟机—类加载器介绍

    Java虚拟机(Java Virtual Machine,JVM)是一个能够执行 Java 字节码的虚拟计算机。它是 Java 技术的核心部分,是 Java 应用程序运行的基础。 Java 程序在编译后会生成字节码(bytecode),这种字节码是一种中间代码,它不依赖于具体的操作系统和硬件平台。 JVM 就是在特定的操作系统

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包