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

java类的动态载入模型(一)

    博客分类:
  • java
阅读更多
概念

java应用程序是依赖虚拟机JVM的(可以说它是一种伪代码)。java类文件经过编译生成字节码文件,这种字节码文件可以被JVM识别并解释。但是JVM如何获得它呢,这需要一种寻找方案,java提供了ClassLoader类来实现这个机制。JVM通过ClassLoader来寻找指定的类并载入它们。

在实际运行中,java类是动态载入的,需要的时候才载入JVM。

java类的动态载入是一种委托模型,见下图。

共有四种ClassLoader类型:
    bootstrap loader :固化在JVM中,这个东西不是用java写的。载入基本的java类,如jre/lib/rt.jar
    ExtClassLoader :载入扩展类
    AppClassLoader :载入本地自定义类
    URLClassLoader :载入来自网络的类文件


当一个类需要由指定的ClassLoader载入的时候,该ClassLoader先将这个载入任务交给它的parent(这里不是继承的概念),就这样一层一层把任务传递上去,直到找到可以执行载入的ClassLoader。
做个试验
package com.classloader.test;
import com.log.test.LoggingExampleImp;

public class CTTest 
{

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		Class sc = java.util.Date.class;
		System.out.println(sc.getName());
		System.out.println(sc.getClassLoader());
		
		Class st = LoggingExampleImp.class;
		System.out.println(st.getName());
		System.out.println(st.getClassLoader());

	}

}

输出:
java.util.Date
null
com.log.test.LoggingExampleImp
sun.misc.Launcher$AppClassLoader@82ba41

String和自定义的LoggingExampleImp分别被自己的ClassLoader载入。假设有一个自定义的java.util.Date(记住这是自定义的),如果不用委托机制会有什么效果呢。java.util.Date就可能被AppClassLoader载入,这样jre中的Date就会被覆盖,呵呵,如果自定义个System String呢...。这种委托机制阻止了恶意代码对应用程序的污染,是java应用程序的第一层安全机制。

  • 描述: ClassLoader委托模型
  • 大小: 4.8 KB
分享到:
评论

相关推荐

    worldwind java 3d模型载入源代码

    为了提高性能,WorldWind Java支持LOD(Level of Detail)技术,根据模型与相机的距离动态调整细节级别。源代码可能会包含计算和切换LOD级别的逻辑。 7. **交互与事件处理**: 可能还会涉及到用户交互,如鼠标...

    在Java_3D中载入外部3D模型文件.pdf

    在Java_3D中载入外部3D模型文件.pdf

    在Java_3D中载入外部3D模型文件.doc

    在Java 3D环境中,加载外部3D模型文件是一项关键任务,尤其是对于那些希望在应用程序中展示复杂三维图形的开发者。Java 3D虽然支持多种外部3D模型文件格式,但是直接可用的只有.obj和.lwd两种。其中.obj文件格式更为...

    java并发之内存模型.docx

    Java并发编程中的内存模型是Java虚拟机(JVM)规范的一部分,它的设计目的是为了屏蔽不同硬件和操作系统内存访问的差异,确保Java程序在各种平台上都能有一致的内存访问行为。在并发环境中,线程间的通信和同步至关...

    深入类别载入器快速下载

    2. 双亲委托模型:Java的类别加载机制遵循双亲委托模型,即当一个类加载器接收到加载类的请求时,它首先会将任务委托给其父类加载器,只有当父类加载器无法加载时,子类加载器才会尝试加载,这样可以确保系统类不被...

    深入类别载入器

    在Java中,每个类都是一个独立的执行单元(即`.class`文件),它们可以在运行时被动态加载和执行。这种特性使得Java程序可以在不停止运行的情况下更新代码,极大地提高了程序的灵活性和可维护性。 #### 四、类加载...

    Java感知机

    在"Java感知机"项目中,Swing被用来创建一个可视化界面,用户可以输入数据或者载入数据文件,然后模型会根据这些数据执行训练并展示结果。 感知机的学习过程包括了两个主要步骤:更新权重和判断错误。当一个新的...

    基于Java3D的重载机器人运动学建模与仿真软件开发.pdf

    通过Java3D提供的三维模型载入接口,可以将模型导入仿真系统中进行显示,并通过人机交互的方式进行操作和分析。 通过系统的建模算法原理和3D仿真过程模型导入、显示以及人机交互的实现,本文为基于Java3D平台的重载...

    Java虚拟机模拟实现

    5. **类加载器的双亲委派模型**:当一个类加载器接收到加载类的请求时,它首先会委托给父加载器,只有当父加载器无法加载时,子加载器才会尝试加载,这种设计避免了类的重复加载和保证了类的唯一性。 6. **异常处理...

    java classloader

    Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...

    2_Java虚拟机( 内存结构).pdf

    栈是Java线程执行方法的内存模型,每个线程对应一个栈,用于存储局部变量、操作数栈、动态链接、方法出口等信息。当线程结束时,相应的栈也释放。本地方法栈与栈类似,只是它用于存放本地方法。 JVM的内存结构是一...

    Java内存模型知识详解

    Java内存模型是Java虚拟机(JVM)中的一种抽象概念,定义了Java程序中变量的访问规则和内存模型的交互关系。 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出...

    java深度历险2

    它们遵循双亲委托模型,即当一个类加载器需要加载类时,它会首先委托给父加载器,只有当父加载器无法加载时,才会尝试自己加载。这种设计保证了类的唯一性,避免了类的重复加载和冲突。书中可能详细讲解了自定义类...

    java深度历险(繁体)

    它按照双亲委派模型工作,保证了类的唯一性,并且允许自定义类载入器以实现特定的加载策略,比如动态加载或热更新。 接下来,Java与MS Office的集成,主要是通过Java的COM(Component Object Model)接口来实现的,...

    基于JAVA3D的核电站三维模型在线浏览系统的研究.pdf

    本文探讨了基于JAVA3D技术实现核电站三维模型在线浏览系统的研究,该系统能够满足工程公司、施工方、制造方和业主等相关方对核电站三维模型进行在线浏览的需求。 首先,文章概述了核电站设计领域三维设计工具的应用...

    solaris spark内存模型

    为了理解多线程Java程序在多处理器上的行为,我们需要正式理解硬件内存模型(如SPARC的TSO/PSO模型)以及软件内存模型(JMM)。通过正式的可执行规范,我们可以计算测试程序在JMM和硬件内存模型下的所有允许行为,...

    java五子棋 人机对战 源码及素材

    1. 类与对象:Java是一种面向对象的语言,"wzq.class"和"wzq$1.class"代表编译后的类文件,"wzq"可能是游戏主类,而"$1"通常表示内部类。这里涉及类的定义、对象的创建以及成员变量和方法的使用。 2. GUI编程:...

    Java面试题(SSH框架)

    延迟加载是Hibernate的另一个重要特性,它允许开发者在操作数据时才将数据加载到内存中,而不是一开始就全部载入。这样做可以有效地降低内存使用,提升性能。 Hibernate对类之间关系的实现通过配置文件中的关系标签...

    基于Java的XML解析与反射设计模式.pdf

    Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。 XStream是一个易用的、开源的库,使得Java对象和XML文档之间的转换变得简单。它可以完美地转换XML,与以往的解析XML工具dora相比,...

Global site tag (gtag.js) - Google Analytics