使用Java进行Qemu用户仿真

时间:2014-03-19 12:57:22

标签: java qemu kvm

我正在使用QEMU模拟器来跟踪用户程序的执行。我们添加了一个辅助函数,它打印所有执行指令的IP。我们已经测试了这个工具的工作原理,用于两个素数程序的变体 - 一个用C语言,另一个用Java语言。我们为每个程序尝试了4个不同的输入参数,期望在每种​​情况下执行不同数量的指令。素数程序的C版遵循预期的线性趋势,即线数随着输入的增加而增加。但是,Java程序每次都会提供完全相同数量的指令。

我觉得Java执行跟踪只捕获JVM代码,而不是正在运行的实际代码。

JVM修改的代码在哪里运行QEMU? QEMU是否有任何特殊方式捕获自修改代码的执行?

1 个答案:

答案 0 :(得分:1)

Hotspot JVM(您可能正在使用的)有两种执行Java代码的模式:解释和编译。启动程序时,它将首先以解释模式运行。如果JVM决定经常执行一段代码,它将编译它并使用已编译的代码。

因此,您应该看到执行指令数量的线性趋势,但只要JVM在解释模式下运行,您将只看到解释器的指令,因为没有与java代码对应的字节代码。

您是否了解x86 CPU的性能计数器?它们可用于在不使用任何虚拟机的情况下测量指令数量。 https://perf.wiki.kernel.org/index.php/Main_Page