Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java进行Qemu用户仿真_Java_Qemu_Kvm - Fatal编程技术网

用Java进行Qemu用户仿真

用Java进行Qemu用户仿真,java,qemu,kvm,Java,Qemu,Kvm,我使用QEMU模拟器来跟踪用户程序的执行。我们添加了一个helper函数,用于打印所有已执行指令的IP。我们已经针对质数程序的两个变体测试了该工具的工作情况——一个是C语言,另一个是Java语言。我们为每个程序尝试了4个不同的输入参数,期望在每种情况下执行不同数量的指令。素数程序的C版本遵循预期的线性趋势,即线的数量随着输入的增加而增加。但是,Java程序每次给出的指令数完全相同 我觉得Java执行跟踪只捕获JVM代码,而不是正在运行的实际代码 JVM修改的代码在QEMU上运行在哪里?QEMU是

我使用QEMU模拟器来跟踪用户程序的执行。我们添加了一个helper函数,用于打印所有已执行指令的IP。我们已经针对质数程序的两个变体测试了该工具的工作情况——一个是C语言,另一个是Java语言。我们为每个程序尝试了4个不同的输入参数,期望在每种情况下执行不同数量的指令。素数程序的C版本遵循预期的线性趋势,即线的数量随着输入的增加而增加。但是,Java程序每次给出的指令数完全相同

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

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

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

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


您知道x86 CPU的性能计数器吗?它们可以用来测量指令的数量,而无需使用任何虚拟机

你能概述一下你是如何使用QEMU的吗?(在过去,我也尝试过类似的方法,但在我的第一次尝试中,我只收集了QEMU的每个翻译块的第一个IP,而不是每个IP。)此外,如果在本机硬件上对程序计时,Java程序是否显示出预期的线性减速?QEMU使用动态翻译机制。它将来宾块转换为本机块,并将其保存在代码缓存中。您不应该在翻译部分添加跟踪机制。相反,生成一个辅助函数,该函数为每个指令调用。在每个指令的执行过程中调用一个helper函数