繁体   English   中英

为什么引导类加载器会加载精确定位(这是一个javaagent)?

[英]Why the pinpoint (which is a javaagent) is loaded by bootstrap class loader?

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

通常,java代理应该由App类加载器加载,就像它在classpath中一样。 但我发现pinpoint由引导类加载器加载。 我检查了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

精确定位如何实现? 也许@emeroad很清楚。

这是代理程序清单中Boot-Class-Path属性的结果 由于此条目,代理程序的jar文件将添加到引导加载程序的搜索路径中。 此外,还可以将代理附加到系统(应用程序)类加载器,就像为任何代理程序完成一样。

所有这些都是在第一次加载代理程序的入口类之前完成的。 由于系统类加载器的父级第一语义,然后请求引导类加载器首先加载代理类,使其成功完成。 因此,代理主类现在由引导程序加载,而不是在您观察它时加载系统类加载器。

另一方面,这个解决方案有点hacky。 相反,应该有一个启动代理将主代理附加到引导加载程序。 这样,在某些备用VM应用不同的加载顺序的情况下,您可以避免依赖加载器层次结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM