美文网首页
那些很坑的代码(2)——重写ClassLoader导致的死循环调

那些很坑的代码(2)——重写ClassLoader导致的死循环调

作者: 黄云斌huangyunbin | 来源:发表于2019-04-22 10:22 被阅读0次

其实就是很简单的一个自定义ClassLoader

@Override
    protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
  Class result = null;
   .....

 result = super.loadClass(name); //问题出在这里

 if (resolve) {
    super.resolveClass(result);
  }
  return result;

很快速的就写完了,但是一运行,就发现线程的堆栈都溢出了。


image.png

为什么一直调用ClassLoader的loadClass方法啊,为什么两个方法互相来回调用啊。
看看ClassLoader的loadClass方法:


image.png
这里会调用loadClass(String name, boolean resolve),但是这个方法就是我们自己重载的方法啊,这样就出现死循环了。

loadClass(String name, boolean resolve) -> super.loadClass(String name) -> loadClass(String name, boolean resolve) ...

怎么解决呢,其实很简单,调用父类的同参数的方法就好

loadClass(String name, boolean resolve) -> super.loadClass(String name, boolean resolve) 这样就好了。

@Override
    protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
  Class result = null;
   .....

 result = super.loadClass(name,false); //加个参数false就解决了

 if (resolve) {
    super.resolveClass(result);
  }
  return result;

相关文章

网友评论

      本文标题:那些很坑的代码(2)——重写ClassLoader导致的死循环调

      本文链接:https://www.haomeiwen.com/subject/oqwegqtx.html