java - 使用代理与进程附加 jvm 分析器之间的区别

标签 java performance jvm profiler jprofiler

使用 jvm agentlib 附加 jvm 分析器(在我的例子中是它的 jprofiler)和动态附加到进程之间有什么区别?

除了静态分析与动态分析的优点之外,这两种方法之间还有其他显着差异吗?

假设分析器在应用程序服务器本地运行。

最佳答案

正如 Stephen 所说,附加模式不适用于 Java 1.5 及更低版本(附加是在 Java 6 中引入的)并且只能通过添加 -agentlib VM 参数来分析应用程序的启动。远程分析的限制不适用于 JProfiler,您可以在其中使用 jpenable 命令行工具为分析准备远程进程。

附加模式的主要缺点是探查器在加载类时看不到所有类。相反,对于感兴趣的类,它必须重新检测这些类。这需要时间,并且在 Java 8 之前它会给 PermGen 带来负担,因此与在启动时出现相比,探查器在检测类时必须更具选择性。

例如:记录数组分配的堆栈轨迹只有在检测所有调用点时才有可能。在附加模式下,这意味着所有类都需要重新检测,这是不切实际的,因此在 JProfiler 中,附加模式下未启用此功能。

还有其他几个此类问题会导致附加模式下的功能限制。

关于java - 使用代理与进程附加 jvm 分析器之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36510287/

相关文章:

jvm - 为什么第一次调用 scrypt() 仅使用 1% CPU 并且在 GCE 中花费了半个小时?

JNI C++ 环境中的 Java 线程仅使用一个内核。 Arm 处理器和 Ubuntu

安卓工作室 : Error: Could not create the Java Virtual Machine

java - 如何将 SSL 证书添加到 Bluemix java Cloud Foundry 应用程序?

javascript - '点对点路径'd3可视化性能问题

python - 减少函数调用

r - 如何尽快基于组连接行

c - JNI : call to a function where memset happens causes jvm-fetch to crash in the second call

java - googlecredential没有这样的方法错误

java - 从 dynamoDB 返回更新的项目