我正在编写一个用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线程完成的)
答案 0 :(得分:2)
作为一般规则,Java Runtime Environment不会在退出时执行垃圾回收。更直接的问题是JIT的性能成本,当然还有Write Dumb Code。此外,main()
的签名需要String[]
类似
public static void main(String[] args) {