`
yejf_java
  • 浏览: 7154 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA类加载浅谈

阅读更多
类加载器
        1. 引导类加载器
                负责加载系统的内核文件,如 java.lang、java.util包等
                搜录路径为: JAVA_HOME/jre/lib 及 JAVA_HOME/lib
               
       2. 扩展类加载器
                负责加载JDK的扩展包,搜寻路径为:JAVA_HOME/jre/lib/ext
               
       3. 系统类加载器
                负责加载用户的自定义类型;
       
        4. 自定义类加载器
                根据业务规则来加载
               
各种类加载器的关系:
        引导类加载器
               |
         扩展类加载器
               |
           系统类加载器
               |
            自定义类加载器
       
       
相关API:
java.lang.Class
                getClassLoader()                --> ClassLoader
java.lang.ClassLoader
                getParent()                --> ClassLoader
                loadClass(String name,  boolean resolve)
                findLoadClass(String name);
                findClass(String);
                defineClass(String name, byte[] buf, int off, int len);
               
类加载的原理:
1.所有类的加载都会递归地调用父类的类加载器来加载类, 采用的是一种代理的方式
如下:
比如, JVM现在在加载 org.example.Student 这个类, 则首选会加载 Object类, 因为任何类都继承于 java.lang.Object
而Student的类加载器,在默认情况下为sun.misc.Lanucher$AppClassLoader,   依据代理方式        ,它会先去代理给父类的加载器【扩展,再到引导】
由父类加载器尝试去加载 Object, Student, 当然, 引导类加载器可以加载到 Object类,但加载不到 Student, 所以,最终, Student会被 应用类加载器所加载;

2. 类加载器 ClassLoader 加载类时,调用方法的顺序为:
   首先根据完整的全限定名 去调用 loadClass 方法 【此方法实现了 代理的方式,会依次代理给父类加载器】
   在loadClass方法内会调用 findLoadClass, 来查找此类之前是否已加载过, 如果有,则返回,如果没有,则调用
   findClass 方法去查找, 【ClassLoader默认情况下会依据 classpath环境变量来查找】
   最后调用 defineClass 把字节码转换成 java.lang.Class的一个实例;
分享到:
评论

相关推荐

    Java虚拟机类加载机制浅谈

    Java中的类是动态加载的,只有在运行期间使用到该类的时候,才会将该类加载到内存中,Java依赖于运行期动态加载和动态链接来实现类的动态使用。  一个类的整个生命周期如下:  加载,验证,准备,初始化和...

    Java反射技术浅谈.pdf

    Java反射技术浅谈 Java作为一种广泛使用的编程语言,它的设计目标之一是提供一种灵活的编程方式,使程序能够在运行时识别和操作对象。为了实现这一目标,Java语言引入了反射机制,使得开发者能够动态地探索和操作...

    Java反射技术浅谈 (1).pdf

    Java反射技术浅谈 Java反射技术是一种可以访问、检测和修改程序本身状态或行为的能力。通过反射,Java程序可以加载一个运行时才知道名称的类,得到其完整内部信息,并创建其对象,或对其属性设值,或调用其方法。...

    java jvm调优浅谈

    Java JVM 调优浅谈 Java 虚拟机(JVM)是 Java 语言的核心组件之一,负责加载、验证、执行 Java 字节码。JVM 的调优对于 Java 程序的性能和稳定性至关重要。下面对 JVM 调优的相关知识点进行了详细的解释。 数据...

    浅谈JAVA虚拟机JVM及工作原理

    "浅谈JAVA虚拟机JVM及工作原理" Java虚拟机(JVM)是Java语言的 runtime 环境,它提供了一个平台独立的环境,使得Java程序可以跨平台运行。JVM 的主要组件包括虚拟机栈、堆、方法区、程序计数器、本地方法栈等。 1...

    浅谈Java中Mysql数据库的连接与操作.pdf

    连接MySQL数据库的步骤包括引入必要的java.sql包、加载JDBC驱动程序、创建数据库连接(Connection),以及创建数据库连接后进行操作。在Java代码中,这一过程大致如下: 1. 导入java.sql包; ```java import java....

    java培训教程-浅谈java虚拟机.pdf

    当Java程序启动时,JVM会加载类文件,解析字节码,并在必要时将其编译为更高效的本地代码(JIT编译)。此外,JVM还提供了一种安全机制,确保字节码不包含恶意或错误的代码。 理解JVM的工作原理对于Java开发者至关...

    浅谈Java类的加载

    网上有许多关于类加载的帖子,许多都有不严谨、错误,如果你想正确地,更深入地学习,有必要去oracle的官网看Java虚拟机规范。 路径有点深,跟着下面的图片左上角去找 ———-进入正题———- 这里我们准备一个...

    浅谈为什么java命令运行class文件出现异常共7页.p

    在本资料"浅谈为什么java命令运行class文件出现异常共7页.pdf"中,可能详细讨论了这些常见问题及其解决方法。由于提供的压缩包中仅有一个名为"赚钱项目"的文件,这似乎与Java编程无关,因此可能不是解决上述问题的...

    浅谈java连接池

    1. 加载数据库驱动程序。 2. 使用JDBC建立数据库连接。 3. 执行SQL语句并访问数据库。 4. 断开数据库连接。 然而,这种模式存在以下问题: - 每次请求都需要新建连接,耗时且消耗系统资源。 - 连接未正确关闭可能...

    浅谈jvm原理

    "浅谈 JVM 原理" JVM(Java Virtual Machine)是一种虚拟机,它可以模拟完整的硬件系统功能,运行在一个完全隔离的环境中,提供了一个完整的计算机系统。JVM 可以分为三类:VMWare、Visual Box 和 JVM。其中,...

    浅谈Java 类中各成分加载顺序和内存中的存放位置

    Java 类的加载过程是程序运行中的重要环节,它涉及到类的生命周期和内存管理。本文将深入探讨Java类中各成分的加载顺序以及它们在内存中的存放位置。 首先,类的加载通常发生在以下三种情况: 1. 创建对象:通过`...

    浅谈Java程序的性能优化

    3. **避免重复初始化变量**:Java会默认初始化变量,但对于继承的类,构造函数链会被自动调用,可能导致不必要的重复初始化。合理设计类的构造函数,减少不必要的资源浪费。 4. **使用final修饰符**:final修饰的类...

    浅谈Java中的class类

    这使得Java具备了强大的元数据操作能力,可以实现动态加载类、创建对象、调用方法等功能。 首先,每个Java类在运行时都有一个对应的`Class`对象,这个对象包含了类的所有元数据。例如,当我们声明一个对象并实例化...

    浅谈两个jar包中包含完全相同的包名和类名的加载问题

    Java中的类加载机制是指Java虚拟机(JVM)在加载类文件时的相关处理过程。当多个Jar包中包含相同的包名和类名时,可能会出现类加载问题。下面我们来讨论这种情况下的类加载问题。 类加载机制 Java中的类加载机制是...

    浅谈计算机软件开发的JAVA编程语言.pdf

    另外,JAVA7.0版本以后的升级类加载classloader架构提升了独立性和运行速度,以及支持使用catch语句进行智能选择,都使得JAVA语言在众多编程语言中脱颖而出,成为计算机软件开发的重要工具。 在计算机软件开发的...

    浅谈计算机软件开发的JAVA编程语言.zip

    在安全性方面,Java设计有严谨的安全模型,包括类加载器机制、访问权限控制和安全管理器,以防止恶意代码的执行。Java还支持数字签名和加密技术,增强了软件的安全性。 总的来说,Java编程语言以其强大的功能、跨...

    浅谈JVM核心之JVM运行和类加载

    在Java世界中,虚拟机(JVM)...总的来说,了解JVM的运行时数据区和类加载机制对于优化Java应用程序性能、解决类冲突和理解类加载过程至关重要。通过深入学习这些概念,开发者可以更好地理解和控制Java程序的运行行为。

Global site tag (gtag.js) - Google Analytics