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



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

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

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

继续前进,如果以上两点不是问题,我的主要问题是:

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

我对此做了一些简短的研究,但我所能找到的只是衡量程序本身效率的方法,而不是用于运行它的编译技术。我正在尝试做的事情可能吗?有没有方法可以实际分析一个编译器相对于另一个编译器的速度?

任何帮助不胜感激!

我如何实际对一种方法与另一种方法的加速进行基准测试?

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

我们是在谈论编译所花费的 CPU 周期吗?还是从源代码到运行程序的挂墙时间?还是微观基准测试中一些关键方法的峰值性能?整体稳态程序性能?程序初始化的速度?...

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

最新更新