请问自定义类加载器是怎么实现将字节码文件加载到方法区的啊?

新手上路,请多包涵

下面是《深入理解Java虚拟机》中自定义类加载器的一个例子,请问哪一行代码对应将字节码加载到方法区的过程啊?还是说在defineClass方法中在创建Class对象之前完成了这项工作?
image.png

阅读 1.6k
2 个回答

defineClass方法就是将读取到的类的class文件,生成class对象。生成class对象的过程中,就包含将字节码加载到方法区。

就是defineClass方法
classloader中的方法大体分为三大类:loadClass/findClass/defineClass。loadClass是直接被开发者调用的,主要实现双亲委托机制,如果parent没有加载话就调用findClass,findClass是定义查询class文件的逻辑的,所以一般自定义classloader都是重写这个方法,findClass获取到class文件的字节码后,调用各种defineClass来完成类加载,返回class对象
这里需要注意,通常不会像你给的例子里那样直接重写loadClass方法,因为会破坏双亲委托机制,导致很多问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题