`
cuiyi.crazy
  • 浏览: 52290 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ClassLoader专题(一):ClassLoader基础

阅读更多

ClassLoader 专题(一): ClassLoader 基础 <!----> <o:p> </o:p>

ClassLoader 专题(二):从 Servlet 容器看 ClassLoader 机制的妙用

JVM启动,会形成3个类加载器组成的初始化加载器层次结构:
bootstap classloader (加载核心类)
        ||
extension classloader(加载ext(目录),即java.ext.dirs())
        ||
system classloader   (加载-classpath或者java.class.path或者CLASSPATH)


ClassLoader机制:
a)全盘负责:一个classloader加载一个class后,这个class所引用或者依赖的类也由这个classloader载入,除非显示的用另一个classloader载入
b)委托机制:先由父加载器加载,除非父加载器找不到时才从自己的类路径中去寻找
c)Cache机制:classloader采用缓存机制,即先查cache;若cache中保存了这个class就直接返回;若无,才从文件读取和转化为class并放入cache

 

ClassLoader加载类顺序:
1)检查cache是否有该类:
    11)若有直接返回
    12)若无,请求父类加载
        121) 若无父,则从bootstap classloader加载
2)加载:
    21)寻找class文件(丛与此classloader相关的类路径中寻找)
    22)从文件载入class
    23)找不到则抛出ClassNotFoundeException
3)扩展:
    记载时即2),覆写findClass可以实现自己的载入策略
    记载时即2),覆写loadClass来实现自己的载入过程


如何实现运行时动态载入与更新
本质:只要动态改类搜索路径和清除classloader的cache已载入的class就ok
做法:
1)继承ClassLoader:覆写loadClass方法,动态寻找class文件
2)只要重新使用一个新的类搜索路径来new一个classloader就可以,这样既更新了类的搜索路径以便来载入新的class,也更新生成了一个空白的cache


classloader载入的方式
1)Pre-loading 预先载入,载入基础类
2)load-on-demand 按需求载入


JDK为啥有两个JRE?
JDK中jre是运行java本身的程序,如javac
ProgramFile(默认安装)中jre是运行用户编写的java程序



crazycy 2007-02-01 20:48 发表评论
分享到:
评论

相关推荐

    xwiki-commons-classloader-protocol-jar-5.4.zip

    XWiki Commons Classloader Protocol Jar 5.4是一个重要的组件,它属于XWiki开源项目的一部分。XWiki是一个强大的、可扩展的、面向企业的开源wiki平台,支持创建、管理和分享文档和信息。Classloader Protocol Jar是...

    ClassLoader

    #### 一、ClassLoader概念与作用 在Java编程语言中,`ClassLoader`是一个非常重要的组件,它负责加载程序运行所需的类文件到Java虚拟机(JVM)中。`ClassLoader`不仅管理着类的加载过程,而且其设计模式还对Java的...

    ClassLoader运行机制 自己写的

    1. Bootstrap ClassLoader:这是JVM启动时的第一个ClassLoader,负责加载JDK核心类库(如rt.jar)。 2. Extension ClassLoader:加载JDK扩展目录(如$JAVA_HOME/jre/lib/ext)中的类。 3. System ClassLoader(也...

    Tomcat研究之ClassLoader.pdf

    在深入了解Tomcat的工作原理时,一个重要的组成部分就是其ClassLoader机制。本文旨在深入剖析Tomcat中特有的类加载器(ClassLoader)体系结构,帮助读者理解Tomcat如何管理和加载不同类型的类库。 #### 二、Tomcat...

    aop面向切面需要的jar包

    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang....

    tomcat 类加载机制 —— ClassLoader

    ClassLoader是Java运行时环境的一部分,负责查找并加载Java类到JVM中。在Java中,类的加载、验证、解析和初始化都是由ClassLoader来完成的。Tomcat作为一个Web服务器,其类加载机制设计得相当灵活,以便支持不同Web...

    Java ClassLoader原理

    动态类加载是Java虚拟机的基础机制之一,它为Java平台带来了许多独特的优势。例如,它使得应用程序能够在运行时从远程服务器下载和执行代码片段,从而极大地提高了系统的灵活性和响应速度。下面将详细介绍这些关键...

    Understanding the Java ClassLoader

    为了更好地理解和利用Java的这一特性,本篇将详细介绍Java ClassLoader的作用及其工作原理,并通过构建一个示例ClassLoader来帮助读者深入理解如何自定义ClassLoader,从而扩展JVM的功能。 #### 二、ClassLoader...

    Tomcat 5.0.18 ClassLoader source code insight

    5. **Parent First / Child First策略**:Tomcat的ClassLoader加载策略有两种,一种是"parent first",另一种是"child first"。默认情况下,Tomcat采用"parent first"策略,即Webapp ClassLoader先尝试让上级Loader...

    测试普通Java程序ClassLoader等级关系的Demo程序

    本Demo程序主要探讨的是Java中的ClassLoader等级关系,这一主题对于理解Java应用程序的运行机制至关重要。 首先,我们要了解ClassLoader的基本概念。在Java中,ClassLoader是一个系统组件,它根据指定的全限定类名...

    classloader

    3. 整合自定义ClassLoader:了解如何将自定义的ClassLoader集成到Java应用程序中,替换或扩展默认的加载行为。 4. 考虑Java 2版本的兼容性:学习如何修改你的ClassLoader以适应Java 2及以上版本的特性,比如支持...

    j-classloader-ltr

    在《classloader教程 --- from IBM》这篇教程中,作者Greg Travis通过一系列详细的讲解帮助读者理解Java中的类加载器(ClassLoader)。作为Java运行时系统的一个核心但常被忽视的部分,类加载器负责在运行时查找并加载...

    Java ClassLoader定制实例

    在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将...

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

    Java提供了三种内置的ClassLoader: 1. BootstrapClassLoader(启动类加载器):它是JVM的基础,由C++实现,不继承自`java.lang.ClassLoader`。BootstrapClassLoader负责加载JVM的核心类库,包括rt.jar、charsets....

    ClassLoader 详解.doc

    1. Bootstrap ClassLoader:引导类加载器,也称为原始类加载器。它是整个加载过程的起点,负责加载Java的核心类库,如rt.jar,这是Java运行环境的基础。Bootstrap ClassLoader并非继承自java.lang.ClassLoader,而是...

    resolver_java_wsdl.jar

    at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:688) at java.lang.ClassLoader.loadClass(ClassLoader.java:667) at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:119) at...

    classloader-example:博客帖子

    总的来说,这个“classloader-example”不仅是一个学习Java类加载器工作原理的好资源,也是一个实践自定义加载策略和运行时动态加载的实战案例。通过深入研究这个示例,开发者可以更好地掌握Java的高级特性,提高...

    ClassLoader的 一些测试

    1. Bootstrap ClassLoader:这是最基础的类加载器,由C++实现,负责加载JDK核心库(rt.jar)。 2. Extension ClassLoader:扩展类加载器,负责加载JRE的扩展目录(jre/lib/ext目录下的jar文件)。 3. AppClassLoade...

    ClassLoader小例子

    在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。本示例"ClassLoader小例子"将深入探讨这个概念,并通过一个具体的程序来演示其工作原理。下面我们...

Global site tag (gtag.js) - Google Analytics