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 ()方法能够让类装载器子系 统执行连接动作。

  • 相关阅读:
    分库分表(1) --- 理论
    Elasticsearch(10) --- 内置分词器、中文分词器
    Elasticsearch(9) --- 聚合查询(Bucket聚合)
    Elasticsearch(8) --- 聚合查询(Metric聚合)
    Elasticsearch(7) --- 复合查询
    Elasticsearch(6) --- Query查询和Filter查询
    Elasticsearch(5) --- 基本命令(集群相关命令、索引CRUD命令、文档CRUD命令)
    第二周 Word版面设计
    第六周 Word目录和索引
    第五周 Word注释与交叉引用
  • 原文地址:https://www.cnblogs.com/mongotea/p/11979307.html
Copyright © 2011-2022 走看看