zoukankan      html  css  js  c++  java
  • 5.3.3 类装载器子系统

    和所有其他对象一样,用户自定义的类装载器以及Class类的实例都放在内存中的堆区,而装载的类型信息则都位于方法区。


    ClassLoader中的四个方法是通往Java虚拟机的通道:
    // Four of the methods declared in class java.lang.ClassLoader: protected final Class defineClass(String nane, byte data[]r,int offset, int length);
    protected final Class defineClass(String name, byte data[],
    int offset, int length, ProtectionDomain protectionDomain);
    protected final Class findSystemClass(String name);
    protected final void resolveClass(Class c);

    任何Java虚拟机实现都必须把这些方法连到内部的类装载器子系统中。

    两个被重载的defineClass ()方法都要接受一个名为data[]的字节数组作为输人参数,并且 在data[offset]到data[offset +length]之间的二进制数据必须符合Java class文件格式——它表示一 个新的可用类型。而name参数是个字符串,它指出该类型的全限定名。当使用第一个 defineClass ()时,该类型将被赋以默认的保护域。使用第二个defineClass ()时,该类型的保 护域将由它的protectionDomain参数指定。每个Java虚拟机实现都必须保证ClassLoader类的 defineClass ()方法能够把新类型导人到方法区。

    resolveClass ()方法接受一个Class实例的引用作为参数,它将对该Class实例表示的类型执 行连接动作。而前面提到的defineClass ()方法则只负责装载。当defineClass ()方法返回一个 Class实例时,也就表示指定的class文件已经被找到并装载到方法区了,但是却不一定被连接和 初始化了。java虚拟机实现必须保证ClassLoader类的resolveClass ()方法能够让类装载器子系 统执行连接动作。

  • 相关阅读:
    电商拼团系统开发思路和拼团系统开发产品设计思路
    唐古拉优选拼团系统设计模式和唐古拉优选拼团系统核心代码介绍
    计算机体系结构之三--函数的调用和返回【译】
    cxv文件合并
    ubuntu18.04安装Mono及MonoDevelop,用c#开发winform
    repo怎么都下不完,原因
    repo下载安卓源码经常掉线,解决方法
    编译ad10
    ub18.04 root账户
    安卓源码导入android studio
  • 原文地址:https://www.cnblogs.com/mongotea/p/11979307.html
Copyright © 2011-2022 走看看