Java CPU 无法优化的密集型计算示例

Examples of Java CPU-intensive calculations that can not be optimized

首先我想澄清一下,我的问题不同于 How to check if the JIT compiler is off in Java 的问题,后者希望 jo 关闭 JIT 优化。我希望 JIT 运行 但我希望 cpu 密集型任务以 JIT 无论如何都无法优化的方式编写。现在我开始解释我的问题。 以下是线程 运行 的 CPU-绑定任务。我正在将此任务发送到我的服务器,线程池中的工作人员会在其中选择它并 运行s 它。我希望工作人员 运行 在某个固定的时间内执行此任务,但正如我在 stack-overflow 的 and 问题中所讨论的那样,JIT 会干扰和优化代码,因此工作人员 运行s任意次数。我不希望工人在不同时间 运行。我希望工人在固定的时间内 运行。我应该在 class 之后写什么类型的代码,无论如何 JIT 都无法对其进行优化。请帮忙,因为这是我最后一年 project.Working 示例的一部分,我们将不胜感激!

import java.math.BigInteger;    
public class CpuBoundJob  implements Runnable {     
    public void run() {    
         BigInteger factValue = BigInteger.ONE;
            long t1=System.nanoTime();      
            for ( int i = 2; i <= 800; i++){
              factValue = factValue.multiply(BigInteger.valueOf(i));
            }
        long t2=System.nanoTime();              
        System.out.println("Service Time(ms)="+((double)(t2-t1)/1000000));
    }    
}

Java 中无法确保您的代码运行精确固定的时间。除了来自 HotSpot (JIT) 的干扰之外,垃圾收集器、进程中的其他线程甚至 OS 调度程序都会干扰应用程序的执行时间。您可以调整 JIT -XX 开关来尝试让 JIT 预编译您的代码,但我不推荐这样做。您也可以使用 G1 soft-realtime 收集器来消除 GC 暂停,但最重要的是,如果您真的必须依赖这样的时间(我建议重新设计您的应用程序可能是更好的方法),您需要如果您的要求确实是 real-time,则至少要在堆栈中向下到 C/C++ 应用程序,并且可能一直向下到设备驱动程序级别。 Java 根本不是一种 real-time 语言。