`
pengcqu
  • 浏览: 771673 次
  • 性别: Icon_minigender_1
  • 来自: 未来
社区版块
存档分类
最新评论

JVM ClassLoader机制

阅读更多

1)三个类加载器:

bootstrap classloader - 引导(也称为原始)类加载器,它负责加载Java的核心类。

extension classloader - 扩展类加载器,它负责加载JRE的扩展目录中JAR的类包。

system classloader - 系统(也称为应用)类加载器,加载应用程序的类。

bootstrap classloader不是一个真正的ClassLoader实例

2)获取引导类加载器加载了哪些类:

URL[] urls=sun.misc.Launcher.getBootstrapClassPath().getURLs();
     for (int i = 0; i < urls.length; i++) {
         System.out.println(urls.toExternalForm());
     }

3)获取应用类加载器:

ClassLoader.getSystemClassLoader()

4JVM类加载机制:全盘负责委托机制

全盘负责:当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入;
委托机制:先让parent(父)类加载器(而不是super,它与parent classloader类不是继承关系)寻找,只有在parent找不到的时候才从自己的类路径中去寻找。

Cache机制:如果cache中保存了这个Class就直接返回它,如果没有才从文件中读取和转换成Class,并存入cache,这就是为什么我们修改了Class但是必须重新启动JVM才能生效的原因。

5)每个ClassLoader加载Class的过程是:
1.
检测此Class是否载入过(即在cache中是否有此Class),如果有到8,如果没有到2
2.
如果parent classloader不存在(没有parent,那parent一定是bootstrap classloader了),到4
3.
请求parent classloader载入,如果成功到8,不成功到5
4.
请求jvmbootstrap classloader中载入,如果成功到8
5.
寻找Class文件(从与此classloader相关的类路径中寻找)。如果找不到则到7.
6.
从文件中载入Class,到8.
7.
抛出ClassNotFoundException.
8.
返回Class.
其中5.6步我们可以通过覆盖ClassLoaderfindClass方法来实现自己的载入策略。甚至覆盖loadClass方法来实现自己的载入过程。

 

 

相关链接:

★  Java基础知识点汇总 

★ 【下载】经典常用算法 Java和C语言两种实现(含代码图例)

【下载】Java各种排序算法实现(含代码)

 

 

分享到:
评论

相关推荐

    ClassLoader运行机制 自己写的

    ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的

    Java基础知识点 - 内容比较全面

    1.5 JVM ClassLoader机制 1.6 Java中的synchronized使用 1.7 Java中的反射机制 1.8 Java中Heap与Stack的区别 1.9 Java中String和StringBuffer的区别 1.10 Java中Comparable和Comparator实现对象比较 1.11 Java...

    JVM类加载机制详细讲解

    讲解JVM的ClassLoader子系统原理.

    java ClassLoader机制及其在OSGi中的应用

    内容简介: ClassLoader体系结构 类装载器在JVM中并不是唯一的,JVM自带了三个装载器,用户也可以根据自己的需求自定义新的装载器,这些装载器的体系结构可以看作是树状结构,如图1所示:

    深入理解ClassLoader工作机制.docx

    JVM内存模型,类加载模式工作机制详细,内存屏障,类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三...

    深入JVM内核 - 原理、诊断与优化

    JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 栈分配及...

    【图解版】深入分析ClassLoader类加载工作机制

    【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!

    06.JVM原理讲解和调优.pdf

    JVM 原理讲解和调优 ...JVM 是 Java 语言的核心组件,它的结构组成、类加载机制、内存管理和垃圾回收机制等方面都是 JVM 的关键组件。了解 JVM 的原理和机制可以帮助我们更好地优化 Java 应用程序的性能。

    jvm笔记

    在 JVM 中,类加载机制是通过 ClassLoader 实现的。ClassLoader 负责加载类文件,并将其转换成 JVM 可以识别的格式。在 JVM 中,我们可以使用不同的 ClassLoader 来加载类文件,从而实现类的多版本共存。 在 JVM 中...

    Java ClassLoader

    Java中ClassLoader的解析,从ClassLoader的角度分析了JVM,装载类,创建类的对象的整个过程,更清晰的了解JVM的运行机制。

    ClassLoader加载机制

    该电子书详细介绍了java虚拟机类加载机制,对于深入理解jvm工作原理有很好的帮助作用,对于初学java,有一定工作经验的小伙伴来说是一本提高自身java素养,夯实自己java基本技能的“葵花宝典”。

    ClassLoader(类加载机制)1

    1. ClassLoader(类加载机制) 3. findLoadedClass (查找JVM已经加载过的类) 4. defineClass (定义一个Java

    JAVA笔试总结 -- 非常全面

    native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...

    深入解析Java中的Classloader的运行机制

    主要介绍了Java中的Classloader的运行机制,包括从JVM方面讲解类加载器的委托机制等,需要的朋友可以参考下

    java的ClassLoader类加载器机制

    jvm运行的过程中,需要载入类,而类的加载需要类加载器,本文章提供了java的类加载器的工作原理。可以使读者更加理解jvm的运行机制。

    codeegginterviewgroup#CodeEggDailyInterview#84.JVM加载class文件的原理机制

    JVM加载class文件的原理机制JVM加载class文件的原理机制 JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加

    JVM中编译Class、内存回收、多线程原理和使用

    JVM负责装载class文件并执行,因此,首先是JDK如何将Java代码编译为class文件、如何...JVM提供了多线程支持,对于分布式Java应用而言,通常要借助线程来实现高并发,JVM中线程资源如何同步的机制及线程之间交互的机制。

    如何运用加密技术保护Java源代码

    JVM每次装入类文件时都需要一个称为ClassLoader的对象,这个对象负责把新的类装入正在运行的JVM。JVM给ClassLoader一个包含了待装入类名字的字符串,然后由ClassLoader负责找到类文件,装入原始数据,并把它转换成一...

    java8rt.jar源码-fwh-JVM:对于JVM情况

    classLoader , Java 准备: Markdown编写工具 有道云笔记 Idea开发工具 GItHub项目地址 分析: 类加载运行全过程: 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。 public...

    【JVM】类加载器与双亲委派模型

    内嵌在JVM内核中的加载器,由C++语言编写(因此也不会继承ClassLoader),是类加载器层次中最顶层的加载器。用于加载java的核心类库,即加载jre/lib/rt.jar里所有的class。由于启动类加载器涉及到虚拟机本

Global site tag (gtag.js) - Google Analytics