`
noahgenius
  • 浏览: 137972 次
  • 性别: 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 3d模型载入源代码

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

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

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

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

    面试必问之jvm与性能优化

    Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。 Java的类加载器有三个,...

    ComicMaker-Java:阅读,创作,漫画版

    功能说明: 创作新漫画添加板,盒子,模型,气泡文件载入文件注册导出为PDF 印象添加个人模型漫画上传插件列表: 申请书的英文应用程序的其他语言角色模型对象模型风景模型应用程序图形主题(提取格式) (几种语言...

    Java高并发系列之Java内存模型, 八种基本操作以及安全同步规则

    java内存模型逻辑抽象图 java 内存模型 lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态 unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程...

    Java核心技术II(第8版)

    10.4.3 动态类加载 10.4.4 具有多重接口的远程引用 10.4.5 远程对象与equals、hashCode和clone方法 10.5 远程对象激活 10.6 Web Services与JAX-WS 10.6.1 使用JAX-WS 10.6.2 Web服务的客户端 10.6.3 Amazon的E-...

    jboss-modules.jar

    换句话说,不同于Java传统的使用单个类加载器载入classpath中的所有JAR文件,每一个库(library,可以理解为完成某一个功能的一系列jar的组合)成为一个module,该module仅链接其依赖的其他module,而不再依赖其它任何...

    apache-commons源码及jar文件

    Commons-Collections 提供一个类包来扩展和增加标准的 Java Collection框架 Configuration Commons-Configuration 工具对各种各式的配置和参考文件提供读取帮助. Daemon 一种 unix-daemon-like java 代码的替代...

    Vulkan-Tutorial-Java:Alexander Overvoorde的Vulkan教程已移植到Java

    载入模型 生成Mipmap 多重采样 介绍 编写这些教程是为了使C ++教程易于遵循。 但是,我进行了一些更改以适合Java和LWJGL样式。 该存储库采用与原始存储库相同的结构。 每个章节都有自己的Java文件,以使它们彼此...

    java xml 增删改查

    它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在 JavaScript中使用DOM)。 3:SAX表现较好,这要依赖于它特定的解析方式...

    Musou系列游戏MOD工具v0.1

    本程序需要java运行时,使用前请先安装最新版的JRE(http://www.java.com/zh_CN/download/index.jsp). 3D模型修改需要3DS MAX或Blender. 插件说明: 0.MusouModTool.jar -- Musou资源文件转换工具,点击Open,可选择...

    WebSphere快速入门

    第一部分:开始创建applet,把图载入Gallery,放在applet canvas上放一个图 92 第二部分:把4 Rollover Buttons和5 URl链接放到applet canvas上 92 第三部分:设置所有的属性,建立URL 链接的连接 93 第四部分:增加两...

    基于树莓派的自动驾驶小车,利用树莓派和Tensorflow实现小车在赛道的自动驾驶项目源码+使用文档(高分项目).zip

    在树莓派小车上使用zth_drive和训练好的模型,载入模型,即可实现在原先跑道的自动驾驶。(树莓派上执行) 注意:只需要使用上述提到的代码即可,别的都是一些初始版本或者正在增加的一些新模块。

    基于树莓派的自动驾驶小车,利用树莓派和Tensorflow实现小车在赛道的自动驾驶

    基于树莓派的自动驾驶小车,利用树莓派和Tensorflow实现小车在赛道的自动驾驶;...(电脑上执行),在树莓派小车上使用zth_drive和训练好的模型,载入模型,即可实现在原先跑道的自动驾驶。(树莓派上执行)

    99乘法表java源码-learn-lua:学习lua

    99乘法表java源码 ...能方便地利用表和动态元机制实现基于原型(prototype-based)的面向对象模型; 从5.1版开始提供了完善的模块机制,从而更好地支持开发大型的应用程序; Lua 基础数据类型 函数type

    C#微软培训资料

    9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 10.2 类 的 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 ...

    基于PHP和PDO的ORM框架

    简洁易用的查询功能,强大灵活的模型用法;支持预载入关联查询和延迟关联查询;支持多数据库及动态切换;支持MongoDb;支持分布式及事务;支持断点重连;支持JSON查询;支持数据库日志;支持PSR-16缓存及PSR-3日志...

    Python核心编程第二版(ok)

     3.5.2 动态类型   3.5.3 内存分配   3.5.4 引用计数   3.5.5 垃圾收集   3.6 第一个Python程序   3.7 相关模块和开发工具   3.8 练习   第4章 Python对象   4.1 Pythonc对象   4.2 ...

    Python核心编程第二版

     3.5.2 动态类型   3.5.3 内存分配   3.5.4 引用计数   3.5.5 垃圾收集   3.6 第一个Python程序   3.7 相关模块和开发工具   3.8 练习   第4章 Python对象   4.1 Python 对象   4.2 ...

Global site tag (gtag.js) - Google Analytics