分析Oracle的HotSpot与其他编译技术的加速比较

时间:2018-03-15 21:42:47

标签: jvm g++ jvm-hotspot

我目前正在开展一项必须涉及JIT技术研究的项目。对于与编译器相关的任何内容,我是一个完全的初学者,但我做了一些研究并了解了Java的Hotspot VM。我希望对使用Hotspot与传统编译器(例如,g ++)的好处(或缺点)进行分析。

我最初的想法是创建一些可以通过两个编译器运行的简单程序,以便比较编译时间,但这带来了许多问题:

  • 根据我的理解,Java源代码最初由javac编译器(创建.class文件)转换为字节码,然后,这个字节码可以在运行时通过HotSpot运行以执行程序。鉴于此,将结果与将源直接转换为机器代码的传统编译器进行比较甚至是否相关?
  • 我面临的另一个问题是程序将使用不同的语言(例如C ++ vs Java)。虽然功能相同,但在尝试比较时是否会出现偏差?

接下来,如果上述两点不成问题,我的主要问题是:

我如何才能真正对一种方法与另一种方法的加速进行基准测试?

我对此做了一些简短的研究,但我能找到的只是衡量程序本身效率的方法,而不是用来运行它的编译技术。我试图做的是什么?有没有方法可以实际分析一个编译器加速另一个编译器的速度?

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

  

我如何才能在一种方法与另一种方法中对加速进行基准测试?

您首先需要考虑您实际想要衡量的内容。换句话说,说"加速"不够严谨。

我们是在谈论编译的CPU周期吗?或者从源代码到运行程序的挂机时间?或者微观基准测试中几个关键方法的最高性能?整体稳态计划表现如何?程序初始化的速度? ...

最后,您要比较两个做出完全不同权衡的系统。您可以在注释中找到一些大致可比较的基准测试,但最终它们主要代表特定类型的吞吐量限制任务,而不是大型应用程序。它不像你能找到一个像C和Java一样用firefox编写的应用程序,具有相同的功能集和相当的代码质量。因此,您所做的任何比较都将是不完整的,因为您必须使用一些有限的代理测量来比较两个代码库在比较时的可比性。