`
iamzhongyong
  • 浏览: 805317 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于JVM的ClassLoader(笔记)

阅读更多

     众所周知,java是编译型的语言,写的是java文件,最后运行的是class文件,class文件是运行在JVM之中的,这时候就有一个问题,JVM如何装载class文件的?是通过ClassLoader来进行的,这里做一下笔记,因为发现原作者写的很好《深入分析java web 技术内幕》。

ClassLoader的结构分析

    ClassLoader是一个抽象类,他有很多子类,JVM默认有几个实现类,当然我们也可以自己继承ClassLoader。

    1、defineClass:将byte字节转换为JVM能够识别的Class对象,这样就意味着可以是class文件也可是是网络上的字节流了;

    2、defineClass通常和findClass一起使用,findClass的作用是取得要加载的类的字节码;

    3、如果想在类被加载到JVM的时候就被链接,可以调用resolveClass来完成;

    4、如果不想自定义加载类的规则,也没有复杂的逻辑,可以通过this.getClass().getClassLoader().loadClass("") 来进行加载;

 

ClassLoader中的几个实现类

    1、Bootstrap ClassLoader 这个是JVM加载自身工作需要的类,完全由JVM自己来控制,外部无法访问到这个;

    2、ExtClassLoader比较特殊的,服务的特定目标在System.getProperty("java.ext.dirs");

    3、AppClassLoader,父类是ExtClassLoader,"java.class.path"中的类都可以被这个类加载器加载;

    4、URLClassLoader,一般这个类帮我们实现了大部分的工作,自定义可以继承这个类,这样仅仅在需要的地方做修改就行了;

 

JVM加载clas文件到内存的方式

    1、显示加载:不通过代码里的ClassLoader调用,而是JVM来自动加载类到内存中的方式;

            1.1、通过Class中的forName;

            1.2、通过ClassLoader中的loadClass

            1.3、通过ClasLoader中的findSystemClass

    2、隐身加载:通过代码中ClassLoader来加载的方式;

 

如何加载class文件

    1、找到.class文件,并把文件中包含的byte加载到内存中

    2、验证和解析

          2.1、字节码验证,确保格式正确和行为正确

          2.2、类准备,类中定义的字段、方法和实现接口锁必须的数据结构

          2.3、解析,装入类所引用的其他所有类,如父类、字段、方法签名、方法中使用的本地变量等

    3、静态属性和初始化赋值,以及静态块的执行等

 

关于类加载过程中的几种常见异常

1、ClassNotFindException

    JVM要加载指定的文件的字节码到内存中,但是并没有发现这个文件的字节码。检查方法就是在classpath中看看是否有指定文件存在。

2、NoClassDefFoundError

    JVM规范中这个异常出现的情况是使用new 关键字、属性引用类、实现接口、继承类,如果不存在,会报这个异常。

3、ClassCastException

    对于普通对象,对象必须是目标类的实例或者目标类的子类的实例,如果目标类是接口,那么会把他当做实现了该接口的一个子类。

 

有哪些需要自定义ClassLoader的情况?

1、在自定义的路径下查找自定义的classs文件,需要的文件并不是classpath下面的;

2、对于加载的类做特殊的处理,例如网络传输的安全性等;

3、可以定义类的失效机制,例如检查到文件被修改,则重新加载,从而实现类的热部署;

 

1
1
分享到:
评论

相关推荐

    java之jvm学习笔记五(实践写自己的类装载器)

    这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...

    这是一个关于JVM的笔记,可以帮助你

    这个笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及性能优化等方面,帮助你更好地理解和掌握Java编程的底层运行机制。 首先,JVM的结构包括堆、栈、方法区、本地方法栈和程序计数器等组件。每个部分都有其...

    狂神说JVM探究.rar

    这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...

    jVM学习笔记.ppt

    这一过程涉及到类加载机制,包括Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader和Custom ClassLoader,它们按照特定的层次关系和加载顺序加载类,确保类的唯一性。 类执行机制中,JVM基于栈的架构...

    jvm笔记

    JVM 笔记 今天,我们要讨论的是 JVM 的笔记,这个笔记包括了 JVM 的基本结构、类加载机制、类文件格式等内容。 首先,让我们来看一下 JVM 的基本结构。JVM 可以分为三个部分:CLASS LOADER、RUN TIME DATA AREA 和...

    JVM笔记.docx

    【JVM 体系结构概述】 Java 虚拟机(JVM)是Java应用程序的核心,它作为操作系统上的一个抽象层,使得Java代码可以在任何支持JVM的平台上运行,无需关心底层系统的具体细节。JVM主要由以下几个部分构成: 1. 类...

    Java,JVM相关笔记的代码知识

    这份JVM相关的笔记包含了深入理解JVM内部工作机制的关键代码资源,是学习和优化Java应用程序的重要参考资料。下面,我们将深入探讨Java与JVM的相关知识点。 1. **类加载机制**:JVM通过类加载器(ClassLoader)将...

    ImagesForJVM-JVM笔记图片

    【标题】"ImagesForJVM-JVM笔记图片" 提供的是一系列关于Java虚拟机(JVM)的图像资料,这些图片通常用于辅助理解和学习JVM的工作原理。JVM是Java程序运行的基础,它负责解释执行Java字节码,使得Java能够实现跨平台...

    JVM学习笔记

    ### JVM学习笔记知识点详解 #### 一、JVM的基本结构 **JVM(Java Virtual Machine,Java虚拟机)**是一种可以执行Java字节码的虚拟机。它为Java提供了平台无关性,使得Java代码可以在任何安装了JVM的平台上运行。 ...

    jvm笔记记录.docx

    ### JVM基础知识及类加载机制详解 #### Java程序的运行流程 Java程序的执行流程主要包含以下几个步骤: 1. **编译**: 将`.java`源文件编译为`.class`字节码文件。 2. **打包**: 将多个`.class`字节码文件打包为一...

    jvm上篇笔记.md

    根据提供的文件信息,我们可以深入探讨JVM(Java虚拟机)的核心概念和技术细节。本文将从JVM概述出发,深入分析其工作原理,并详细介绍类加载子系统的重要性和运作机制。 ### JVM概述 #### 1. 什么是JVM? JVM...

    JVM性能学习笔记思维导图

    本文将根据"JVM性能学习笔记思维导图"的主题,详细阐述JVM的主要组成部分,性能调优的关键点以及相关的工具与实践策略。** 1. **JVM结构与内存模型** - **类装载器(ClassLoader)**:负责加载类文件,确保类在运行...

    深入Java虚拟机JVM类加载学习笔记

    ### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...

    记录一些自己学习MySQL,JUC,JVM的学习笔记.zip

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理数据。...通过这些笔记,你可以系统地学习和理解MySQL数据库、Java并发编程以及JVM的运作机制,为你的软件开发职业生涯打下坚实的基础。

    Java虚拟机JVM类加载学习笔记

    JVM的类加载器(ClassLoader)负责将编译后的`.class`文件加载到内存中,为程序执行做好准备。当类被加载时,JVM会在内存的运行时数据区的方法区内存储类的信息,并在堆中创建一个`java.lang.Class`对象来封装这些...

    JVM性能优化相关面试题21道.pdf

    其次,JVM加载Class文件的原理机制,主要是通过类加载器(ClassLoader)及其子类完成的。类加载器是一种类,它的作用是从硬盘读取.class文件,并将其加载到内存中。类加载分为隐式和显示加载,隐式加载通常是在创建...

    JVM学习笔记(一)——类的加载机制

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是类加载机制。类加载机制负责将Java源代码编译成的.class文件转换为内存中的数据结构,以便程序可以执行。本篇将深入探讨类加载机制的原理和过程。 ...

    Java多线程笔记

    Java多线程笔记是 Java 编程语言中关于多线程编程的笔记,涵盖了线程基础知识、线程优先级、线程状态、守护线程、构造线程、线程中断等多方面的内容。 获取简单 main 程序中的线程 在 Java 中,可以使用 ...

    java学习笔记整理

    Java的工作流程包括编写源代码,通过编译器生成字节码,然后由JVM的ClassLoader装载类文件,经过校验和解释执行。在安全性方面,Java代码需要通过编译、类装载检查和字节码校验,如果在网络上运行,还有沙箱保护,...

Global site tag (gtag.js) - Google Analytics