A fast virtual machine written by C++.
这是一个仍处于研究中的 C++
编写的虚拟机 (虚拟 CPU
)。
Windows
下的工程默认支持 VS 2015
及更高版本,如需创建比 VS 2015
更旧版本的 Visual Studio
工程,请自行使用 CMake
创建。代码已在 Linux
的 GCC 4.8.4
和 GCC 6.4.0
下测试并编译通过(2018年12月25日 更新)。
本项目是在下面这篇 知乎
帖子的启发下编写的,该文讨论的核心内容是:如何降低或减少虚拟机(解释器)中的物理 CPU
的流水线停滞问题。
( https://www.zhihu.com/question/300109568 )
测试对象 | 耗时 (毫秒) |
---|---|
jlang-vm (C++, 64bit) | 3750 ms |
Java 1.8 (64bit) | 4531 ms |
C#(Mono, Linux 64bit) | 大约 5000 ms |
AngelScript 2.31.0 (32bit) | 10000+ ms |
Lua 5.x | 大约 9000 ms |
Python 2.7 | 22000+ ms |
-
jlang-vm (64bit)
最快的v3
版本计算 fibonacci(40) 用时约3750
毫秒; -
Java 1.8 (64bit)
关掉 JIT,计算 fibonacci(40) 用时约4500
毫秒; -
C#(Mono, Linux 64bit)
计算 fibonacci(40) 用时约5000+
毫秒,由于是不同系统下测试的结果,耗时为大致估算,详细请看后面的C# 版 Fibonacci Test
小节; -
AngelScript 2.31.0 (32bit)
计算 fibonacci(40) 用时约10000+
毫秒; -
Lua 5.4
:在我的 AMD Ryzen 1700X 台式机上测的,用时 9.759 秒,大概相当于Intel i5-4310M
笔记本上9000
毫秒左右; -
Python 2.7
计算 fibonacci(40) 用时约22000+
毫秒;
注:以上数据均为笔记本电脑 Intel i5-4310M
(DDR3 1866 MHz
) 上测试的结果。
操作系统:Windows 10 64-bit
,编译环境:VC 2015 update 3
。
因为很多语言如果不从外部输入,直接把 n
写在代码里,会被优化成常量输出,就失去了测试的意义。
所以在所有语言的测试中,都统一使用手动输入参数 n
。
-
先切换到本仓库所在的目录,使用
CMake
生成makefile
,最后使用make
编译,如下:cd {your_jlang-vm_dir} cmake . make
-
运行
jlang-vm
测试:.\jlang-cm
-
在
Linux
下:cd ./python ./run.sh
-
在
Windows
下:cd .\python run.bat
-
或者手动选择 python 版本,如下:
cd ./python python2 ./fibonacci/fibonacci.py python3 ./fibonacci/fibonacci.py
-
在
Linux
下:cd ./java/Fibonacci ./run.sh
-
在
Windows
下:cd .\java\Fibonacci run.bat
-
运行效果:
Input a number (n = 1-40): ? 40 fibonacci(40) = 102334155 elapsed time: 4531 ms.
-
run.sh
的内容如下:#!/bin/bash # 编译源代码 javac ./src/net/i77soft/algorithm/Program.java cd ./src/ # -Xint 表示禁用 JIT java -Xint net.i77soft.algorithm.Program
-
JDK 1.8
的安装方法:sudo apt-get install openjdk-8-jdk
由于 Visual Studio 的 C#
中找不到有效的关闭 JIT
并开启纯解释执行模式的方法。纯解释器模式只有 Mono
(C#
的克隆版)才支持,但 Mono
我只在 Linux
下安装过,Windows
下没尝试过。
-
如何在
Linux
下的Mono
测试 Fibonacci(Mono
的安装方法请自行百度):cd ./csharp/Fibonacci ./run.sh
-
run.sh
文件的内容如下:#!/bin/bash mcs ./mono/Fibonacci.cs mono --interpreter ./mono/Fibonacci.exe
由于测试机器的 CPU
物理性能跟对比的笔记本不一样,且不是 Windows
环境,
不方便对比,但比同机器同系统下的 Java
版相比,略慢。