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

  • 相关阅读:
    centos 安装docker-ce
    quartz.net .netcore 定时任务部署到linux
    c# 获取linux 磁盘信息
    nginx 安装
    async await 理解
    Remote side unexpectedly closed network connection
    centos 安装。net
    yum 操作
    centos7下安装mysql5.7
    git 本地仓库版本无法从远程更新到本地
  • 原文地址:https://www.cnblogs.com/mongotea/p/11979307.html
Copyright © 2020-2023  润新知