网站启用cdn加速,温州市建设工程管理网站,网站维护一年一般多少钱?,网络营销方案总结阿里电商平台每年的各种大促活动#xff0c;对于Java技术来说#xff0c;其中重要一个操作环节就是预热操作。 目录 预热是什么#xff1f;为什么要预热#xff1f; java 程序不预热和预热的调用对比 预热是什么#xff1f;
预热是指#xff0c;在 JVM 启动后#xff0…阿里电商平台每年的各种大促活动对于Java技术来说其中重要一个操作环节就是预热操作。 目录 预热是什么为什么要预热 java 程序不预热和预热的调用对比 预热是什么
预热是指在 JVM 启动后JVM 刚刚启动后我们并不会立即向调用方提供正常的流量而是通过采用一些技术手段通常是一些能跑到大部分case的测试流量对服务进行预热直到服务能够按照预期的响应时间提供服务为止。此后才开始真正为调用方提供服务。
对比看下百度AI给出的开车预热。Java程序世界有类似之处
为什么要预热
显然因为不预热第一次访问将会比较慢调用方无法接受。
为什么第一次访问慢
OpenJDK 使用了 JIT(Just-in-time) 即时编译技术可以动态的把 Java 字节码编译成高度优化过机器码提高执行效率但是在编译之前Java 代码是以相对低效的解释器模式执行的。可以顺带复习下.class文件加载过程https://doctording.blog.csdn.net/article/details/145503360
在应用启动完成后、业务流量刚进来的短时间内容易出现的状况是:
大量 Java 方法开始被 JIT 编译请求处理很慢线程可能大部分慢慢处理、有很多排队等待着、甚至有gc现象最终的结果就是系统负载飙高可能导致很多用户请求超时。极端情况可能JVM服务一启动立刻被高流量打死
参考https://blog.csdn.net/crazymakercircle/article/details/132793889
java 程序不预热和预热的调用对比
预热的调用
预热通常包括以下步骤 多次执行执行多次例如1000次相同的操作或方法调用让JVM有时间进行代码优化。 垃圾收集在预热期间可以触发垃圾收集确保JVM的内存管理达到稳定状态。 记录预热时间记录预热所需的时间这部分时间不计入实际性能测试中。
不预热
预热
可以看到结果都是正确的不预热耗时11,865,732ns, 预热是3,572,354ns 相差了3倍
附测试程序
package warmup;class Fibonacci {/*** 计算斐波那契数列*/public static long fib(int n) {if (n 1) {return n;}return fib(n - 1) fib(n - 2);}
}class TestNoWarmup {public static void test() {long startTime System.nanoTime();long result Fibonacci.fib(30); // 直接计算斐波那契数long endTime System.nanoTime();System.out.println(TestNoWarmup Result: result);System.out.println(TestNoWarmup Time taken: (endTime - startTime) ns);}
}class TestWithWarmup {public static void test() {// 预热阶段执行多次以优化JIT编译for (int i 0; i 100; i) {Fibonacci.fib(30); // 预热调用}// 正式测试阶段long startTime System.nanoTime();long result Fibonacci.fib(30); // 实际计算斐波那契数long endTime System.nanoTime();System.out.println(TestWithWarmup Result: result);System.out.println(TestWithWarmup Time taken (excluding warmup): (endTime - startTime) ns);}
}public class Test {public static void main(String[] args) {
// TestNoWarmup.test();TestWithWarmup.test();}
}