我知道很多人第一眼看到这个问题可能会立即大喊“Java”,但不,我知道 Java 的品质。请允许我先详细说明我的问题。
通常,当我们希望我们的程序在系统上以本机速度运行时,无论是 Windows、Mac OS X 还是 Linux,我们都需要从源代码编译。如果你想在你的系统中运行另一个系统的程序,你需要使用虚拟机或者模拟器。虽然这些工具允许您在非本地操作系统上使用您需要的程序,但它们有时会出现性能和故障问题。
我们还有一个更新的编译器,称为“JIT Compiler”,编译器会在执行前将字节码程序解析为本地机器语言。使用 JIT Compiler 可能会在很大程度上提高性能,但性能仍然与在本机系统上运行它不同。
Linux 上的另一个程序 WINE 也是在 Linux 系统上运行 Windows 程序的好工具。我曾尝试在其上运行 Team Fortress 2,并尝试尝试一些设置。我在 Windows 上以 1280 x 1024 的中高设置获得约 40 fps。在 Linux 上,我需要将所有内容都调低至 1280 x 1024 以获得约 40 fps。不过有两点值得注意:
- 无论我将其设置为低还是高,多边形模型设置似乎都不会影响帧率。
- 当有后期处理效果或一些特殊效果需要对当前帧的绘制像素进行操作时,帧率会下降到 10-20 fps。
从这一点来看,我可以看到法线多边形渲染还不错,但是当涉及到需要显卡才能工作的较新渲染方法时,它就会慢下来。
无论如何,这个问题是相当理论的。有什么我们可以做的吗?我看到WINE可以运行STEAM和军团要塞2。虽然有缺陷,但它们可以在较低的设置下运行。或者,也许我还应该问,“是否可以将一个系统上的整个程序翻译到另一个系统而无需从源代码重新编译并获得本机速度? ”我看到我们也有 AOT 编译器,是否可以将它用于某些事情像这样?或者有太多的限制(例如 DirectX 调用或软件架构的差异),使得不可能有一个完美且非原生的以原生速度运行的系统程序?