gpt4 book ai didi

java - 为什么 pinpoint(它是一个 javaagent)由引导类加载器加载?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:27 25 4
gpt4 key购买 nike

我正在阅读关于javaagent的pinpoint代码,我发现了一个连线问题。

通常,java 代理应该由 App 类加载器加载,因为它在类路径中。但是我发现pinpoint是由bootstrap类加载器加载的。我检查了 pinpoint-bootstrap.jar 附加到 sun.boot.class.path。我对黑魔法很感兴趣。

这是代码。 https://github.com/naver/pinpoint/blob/master/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/PinpointBootStrap.java#L45

pinpoint 如何实现这一点?也许@emeroad 对此很清楚。

最佳答案

这是 Boot-Class-Path atribute in the agent's manifest 的结果.由于这个条目,代理的 jar 文件被添加到引导加载程序的搜索路径中。这是在将代理附加到系统(应用程序)类加载器的同时完成的,就像对任何代理所做的一样。

所有这些都是在代理的入口类第一次加载之前完成的。由于系统类加载器的父优先语义,引导类加载器随后被请求首先加载代理类,它成功完成了。因此,代理主类现在由 Bootstrap 而不是系统类加载器加载。

附带说明一下,这个解决方案有点老套。相反,应该有一个启动器代理将主代理附加到引导加载程序。这样,您就可以避免依赖加载程序层次结构,以防某些替代 VM 应用不同的加载顺序。

关于java - 为什么 pinpoint(它是一个 javaagent)由引导类加载器加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50434475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com