我正在编写一个用 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 的性能成本,当然还有尝试 Write Dumb Code .此外,main()
的签名采用 String[]
之类的
public static void main(String[] args) {
关于java -/usr/bin/time 是否包括 java 程序的程序后垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069645/