java - 与 Thread.sleep 相比,new Thread().sleep 在 CPU 和内存利用率方面有多差?

标签 java multithreading profiling

我知道应该在静态上下文中访问 sleep 。然而,我需要更多的意见,以便我可以向管理层辩护。我现在处理的大多数遗留代码都使用 new Thread().sleep 而不是 Thread.sleep。

这有多糟糕?

for (int c = 0; c < 5; c++) {
    new Thread().sleep(5000);
}

与此相比?

for (int c = 0; c < 5; c++) {
    Thread.sleep(5000);
}

编辑:

    final long start = System.currentTimeMillis();
    System.out.println("Total memory: " + Runtime.getRuntime().totalMemory());
    System.out.println("Free memory: " + Runtime.getRuntime().freeMemory());
    System.out.println("===========================");
    for (int c = 0; c < 5; c++) {
        new Thread().sleep(5000);
        System.out.println("Used memory: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
        System.out.println("===========================");
    }
    System.out.println("Total memory: " + Runtime.getRuntime().totalMemory());
    System.out.println("Free memory: " + Runtime.getRuntime().freeMemory());
    System.out.println("===========================");
    System.out.println("Time elapsed: " + (System.currentTimeMillis() - start) + " milliseconds");

结果(new Thread().sleep):

Total memory: 5177344
Free memory: 4990904
===========================
Used memory: 186440
===========================
Used memory: 205136
===========================
Used memory: 205136
===========================
Used memory: 205136
===========================
Used memory: 205136
===========================
Total memory: 5177344
Free memory: 4972208
===========================
Time elapsed: 24938 milliseconds

结果(Thread.sleep):

Total memory: 5177344
Free memory: 4990904
===========================
Used memory: 186440
===========================
Used memory: 186440
===========================
Used memory: 204848
===========================
Used memory: 204848
===========================
Used memory: 204848
===========================
Total memory: 5177344
Free memory: 4972496
===========================
Time elapsed: 24938 milliseconds

最佳答案

这只是文盲编程,就这么简单。同样适用于以这种方式调用任何静态方法,它不限于 Thread.sleep()。它会带来毫无意义的空间和时间成本,但更糟糕的是,它暴露了程序员的主要概念误解。我不会花太多精力去修复所有的问题,但我肯定会做一些对相关人员进行再教育的事情。

关于java - 与 Thread.sleep 相比,new Thread().sleep 在 CPU 和内存利用率方面有多差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216781/

相关文章:

java - 随机二分搜索算法

java - 无法删除或更新父行: a foreign key constraint fails when deleting entity with reference

java - 找不到 NetBeans 10 JUnit Jar

java - 如何正确创建 SynchronizedStack 类?

c# - WPF MessageBox 取消复选框检查

performance - 在 jvisualvm 中获取方法执行时间的分割

java - 不要求第二次输入

java - 当等待一个线程的 Future 时,线程执行是否会继续

java - 分析 Java EE 应用程序 - 要寻找什么以及要进行哪些更改?

javascript - 如何找到js的哪一部分正在减慢页面速度