我正在编写一个在Java和C++中实现的基准矩阵乘法程序。 我想减少垃圾回收对 Java 程序计时的影响,以便尽可能匹配C++版本。
为此,我使矩阵数组成为主类的最终静态成员,我认为这些成员将在程序线程完成执行后收集。
public class MatMult {
public static final int m1[][] = new int[BIGNUM][BIGNUM];
// ... repeat
public static void main() {
// ... do fun maths
}
}
当我对这些(/usr/bin/time java MatMult
)计时时,计时是否包括在 MatMult 完成执行后清理静态成员所花费的时间?(我的印象是清理目前由单独的 JVM 线程完成)
作为一般规则,Java 运行时环境在退出时不执行垃圾回收。更直接的问题是JIT的性能成本,当然还有尝试编写哑代码。此外,main()
的签名需要像这样的String[]
public static void main(String[] args) {