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

  • 相关阅读:
    paymob QB冲值接口
    社区O2O的发展与未来
    Java版 家政服务 社区服务 家装服务平台 源码 有案例 可定制
    四步走,教你搭建一个接地气的家政平台
    devexpress 之 ChartControl
    不接入微信sdk,在APP中实现微信分享,支付
    Python 爬取妹子图(技术是无罪的)
    京东家具定制数据爬取
    土巴兔数据爬取
    菜鸡的Java笔记 图书馆
  • 原文地址:https://www.cnblogs.com/mongotea/p/11979307.html
Copyright © 2011-2022 走看看