是否可以获得正在运行的 Java 应用程序的程序计数器 (PC) 寄存器值,尤其是在 Android 模拟器中运行的应用程序?例如,gprof 会随机采样 PC 寄存器值,以找出哪个函数占用了程序的运行时间。这样的概念甚至对 JVM 有意义吗?为了澄清,我想要程序计数器的实际值。
另外,有什么方法可以测量代码在内存中的“传播”程度吗?这可以通过查看 objdump 返回的地址范围在常规程序中进行测量。但是,这种方法不处理共享库的地址,这也是我在 JVM 上下文中不理解的概念。
许多像VisualVM这样的Java 分析器可以进行基于采样的分析,这可能像你描述的那样工作。
至于代码内存使用,这就是垃圾回收器的“永久代”(PermGen)主要包含的内容;VisualVM 也可以显示它。