`
hwfantasy
  • 浏览: 21555 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JAVA的类装载简单分析之一

 
阅读更多
  在正文开始之前先贴上一张图片吧

    这就是在上课时候讲的创建一个文档在里面写上任意字符,然后将后缀改为class编译的结果。
    Java虚拟机的类装载就是指将包含在类文件中的字节码装载到JVM中, 并使其成为JVM一部分的过程。JVM的类动态装载技术能够在运行时刻动态地加载或者替换系统的某些功能模块, 而不影响系统其他功能模块的正常运行。
    举个简单的例子来说,大家都应该玩过魔兽争霸这款游戏,它的模式就很像类装载了,魔兽争霸的引擎就相当于JVM,而其中大量丰富的地图就类似于各种类文件,在我们游戏的过程中通过装载不同的地图而使我们得到的游戏体验也不尽相同。
    JVM中类的装载是由ClassLoader和它的子类来实现的,在API文档中有这样的描述
引用
通常情况下,Java 虚拟机以与平台有关的方式,从本地文件系统中加载类。例如,在 UNIX 系统中,虚拟机从 CLASSPATH 环境变量定义的目录中加载类。

然而,有些类可能并非源自一个文件;它们可能源自其他来源(如网络),也可能是由应用程序构造的。defineClass 方法将一个 byte 数组转换为 Class 类的实例。这种新定义的类的实例可以使用 Class.newInstance 来创建。

类加载器所创建对象的方法和构造方法可以引用其他类。为了确定引用的类,Java 虚拟机将调用最初创建该类的类加载器的 loadClass 方法。


    而想要具体了解这个类就不得不说它的几个方法了:
    1.loadCass方法
引用
public Class<?> loadClass(String name)
                   throws ClassNotFoundException使用指定的二进制名称来加载类。此方法使用与 loadClass(String, boolean) 方法相同的方式搜索类。Java 虚拟机调用它来分析类引用。调用此方法等效于调用 loadClass(name, false)。


参数:
name - 类的二进制名称
返回:
得到的 Class 对象
抛出:
ClassNotFoundException - 如果没有找到类
引用
protected Class<?> loadClass(String name,
                             boolean resolve)
                      throws ClassNotFoundException使用指定的二进制名称来加载类。此方法的默认实现将按以下顺序搜索类:

调用 findLoadedClass(String) 来检查是否已经加载类。

在父类加载器上调用 loadClass 方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。

调用 findClass(String) 方法查找类。

如果使用上述步骤找到类,并且 resolve 标志为真,则此方法将在得到的 Class 对象上调用 resolveClass(Class) 方法。

鼓励用 ClassLoader 的子类重写 findClass(String),而不是使用此方法。


参数:
name - 类的二进制名称
resolve - 如果该参数为 true,则分析这个类
返回:
得到的 Class 对象
抛出:
ClassNotFoundException - 如果无法找到类

    由API文档中的描述可知这个方法就是ClassLoader的切入点。其中name参数指定了JVM需要的类的名称,该名称以包表示法表示,如Java.lang.Object;resolve参数告诉方法是否需要解析类,在初始化类之前,应考虑类解析,并不是所有的类都需要解析,如果JVM只需要知道该类是否存在或找出该类的超类,那么就不需要解析。
    由于时间关系,未完待续
  • 大小: 69.8 KB
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    一个Java虚拟机的设计和实现

    方法调用是Java程序中最常见的操作之一,MiniJavaVM需要支持各种类型的方法调用。 ##### 7.2 非本地方法的实现 非本地方法是指那些不涉及调用本地库的方法。 ##### 7.3 本地方法的实现 本地方法允许Java程序调用...

    JAVA上百实例源码以及开源项目源代码

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    南理工java课程设计课件

    Java的简单性体现在剔除了C++中复杂和易混淆的部分,而其动态性使得库的扩展和运行时对象的类型分析变得简便。Java还具有分布式特性,内置了多种网络协议,同时提供优秀的稳定性和安全性,如异常处理机制和内存管理...

    Jboss管理与开发核心技术(第三版)

    - **类装载的重要性**:类装载是服务器架构的核心组成部分之一。无论是具体的服务还是支持服务的类,都需要被正确地装载到服务器框架中。 - **Java类型的定义**:在Java中,类的类型不仅由类的全限定名称决定,从...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

    使用jmap分析Java程序性能问题

    ### 使用jmap分析Java程序性能问题 在Java开发与维护过程中,经常遇到与内存相关的性能问题及故障。这些问题包括但不限于内存泄漏、频繁的...对于每一个Java开发者来说,掌握jmap的使用方法都是十分必要的技能之一。

    均值中值滤波java实现.docx

    - **BufferedImage类**:是Java中用于表示图像的核心类之一,可以存储像素数据,并提供了一系列方法用于读写图像。 - **图像读写**:利用`javax.imageio.ImageIO`类的静态方法`read()`和`write()`来完成图像的加载和...

    java软件开发模拟题

    Applet:早期Java用于构建网络应用的方式之一。 - D. AWT:Java早期的GUI库。 - **正确答案**:A. SWT 9. **Frame类的默认布局管理器** - **选项分析** - A. BorderLayout:Frame类默认的布局管理器。 - B....

    深入java虚拟机加载初始化

    ### 深入Java虚拟机加载初始化 #### Classloader的作用及意义 在深入了解Java虚拟机(JVM)的加载初始化之前,我们先明确一下`Classloader`...希望本文能够帮助您更好地掌握Java虚拟机的核心机制之一:类加载初始化。

    java精典编程100例 12

    单例模式是面向对象设计模式之一,其核心在于确保一个类只有一个实例,并且这个实例能够被整个系统所共享。在Java中,实现单例模式主要有以下几种方法: 1. **懒汉式**:也称为延迟加载模式,即在需要的时候才创建...

    动手实验 Oracle Hadoop装载程序

    2. Oracle 11g:这是Oracle公司的关系型数据库管理系统(RDBMS),是业界广泛使用的数据库平台之一,具有强大的数据存储、处理和分析能力。 3. Java SE6 update30:Java是进行企业级应用开发的常用语言,6版的更新30号...

    Java虚拟机讲解,欢迎下载

    - **经典虚拟机(Classic VM)**:是早期的Java虚拟机实现之一。 - **HotSpot虚拟机**:目前最流行的JVM实现,广泛应用于各种Java应用环境中。HotSpot虚拟机在性能优化方面有着显著的特点,如即时编译(JIT)技术的应用...

Global site tag (gtag.js) - Google Analytics