[alibaba/arthas]修改com.taobao.arthas.core.server.ArthasBootstrap#initSpyn方法中的注释信息

2023-12-12 648 views
9

在java中是获取不到BootstrapClassLoader这个加载器的, ClassLoader.getSystemClassLoader().getParent() 获取到的是sun.misc.Launcher$ExtClassLoader这个加载器。

回答

3

原来的注释是正确的,spy jar 是 append 到 bootstrap classloader里的。 的确 bootstrap classloader在代码里是获取不到的,所以用 ExtClassLoader 来尝试加载,它会通过 bootstrap classloader 来尝试加载 spy class。

0

通过作者指点,这段代码应该是这样的含义:

第一次没加载的时候,获取到ExtClassLoader,他向上委托,但Bootstrap发现这个路径不该我来加载,所以就轮到ExtClassLoader自己,同理他自己也不会加载。 因此会走到下面的逻辑由Instrumentation强制Bootstrap加载,因为父加载的可以对子加载器可见,那么下次就可以通过ExtClassLoader.loadClass拿到对应的Class实例

受教了😄😄😄