首先,让我们谈谈测试方法:
所有 测试 都 在 我的 笔记本 上 运行i7 2.0 Ghz 16 Gb Ubuntu 18.4 和 OpenJdk 11
graal VM 选项:
- Xms6g - Xmx6g - XX:+ UseParallelOldGC - XX:+ UnlockExperimentalVMOptions - XX:+ UseJVMCICompiler
c2 VM 选项:
- Xms6g - Xmx6g - XX:+ UseParallelOldGC
我 运行 一个 测试 称为 PerformanceTest 在 每个 项目中 ,其 执行 一 结束 ,以 结束 标杆 不断。在 这种 方式 的 编译器 不能 优化 的 代码 为 一个 特定的 情况下。于是 我 选择 了 更快的 结果,假设 它 是 在 一个 没有 GC 和 OS 暂停。所有的 测试 均 运行 单- 线程。
以下是结果:
正如你所看到的,Graal使用Kotlin进行编译在小板上的速度明显更快,并且随着大板随机播放的速度稍快一点。
我怀疑这是因为随着更大的主板内存管理,它占用了大量的运行时间。在任何情况下,增量都是受欢迎的,特别是考虑到我通常在较小的板上玩。
为了测试我的理论,我创建了一个新项目,其中包含一些经典算法的实现,以查看性能的差异。你可以在这里找到它。
目前,有两种算法:Mandelbrot Set生成器和Knapsack解算器。
Mandelbrot集
该Mandelbrot集可能是你见过的最有名的分形-即使你不知道这个名字。
在数学上,它被定义为复平面中所有点的集合,其中函数z < - z ^ 2 + c在迭代时不会发散。生成Set迭代复杂平面上某些点的函数并从中创建图像非常容易。
由于这里的目标是性能而不是图形,我使用文本图形保持简单。
让我们从查看Mandelbrot Set的代码开始。
数据 类 Complex(val r:Double,val i:Double){
操作员 欢乐 时光(其他:复杂)=
复杂(
r = 这个。r * 其他。r - 这个。我 * 其他。我,