美文网首页
那些很坑的代码(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