使用jvm agentlib附加jvm探查器(在我的情况下,它的jprofiler)和动态附加到进程之间有什么区别?
除了静态与动态分析的优点之外,这两种方法之间还有其他显着差异吗?
假设探查器在本地运行到应用程序服务器。
答案 0 :(得分:2)
正如Stephen所说,附加模式不适用于Java 1.5及更低版本(在Java 6中引入了附加),并且只能通过添加-agentlib VM参数来分析应用程序的启动。远程分析的限制不适用于JProfiler,您可以使用jpenable
命令行工具准备远程进程以进行分析。
附加模式的主要缺点是分析器在加载时不会看到所有类。相反,对于感兴趣的类,它必须重新测试这些类。这需要时间,在Java 8之前它会给PermGen带来负担,因此在检测类时,分析器必须比在启动时更具选择性。
例如:只有在检测所有呼叫站点时,才能记录阵列分配的堆栈跟踪。在附加模式下,这意味着所有类都需要重新构建,这是不切实际的,所以在JProfiler中,这个功能在附加模式下没有启用。
还有其他一些问题会导致附加模式下的功能限制。
答案 1 :(得分:1)
静态(agentlib)分析器附件的优点是:
动态附件的优点是您可以在不重新启动应用程序的情况下对其进行概要分析,而无需更改其命令行选项(以添加agentlib)。
参考:NetBeans使用NetBeans IDE开发应用程序 版本8.0,Section 8.9, "Attaching the Profiler"