java之如何预热java类以避免首次调用缓慢

kenshinobiy 阅读:11 2024-06-20 12:54:19 评论:0

我正在做一个项目,我需要所有 API 调用的时间少于 1 秒,但我面临的问题是,对每个路由的第一次调用比以下路由慢。

目前,对/login 的第一次调用需要 3.6 秒,接下来的调用需要 170 毫秒,所有其他路由都相同。

我发现使用 -XX:+TraceClassLoading在第一次调用时,这些类被加载到内存中,这导致了性能问题。

但是我没有找到在启动时加载所有类的简单方法,对于每个新服务,我需要在 ApplicationRunner 中添加一个预热调用。

有没有人有自动加载 SpringBoot 应用程序的类或预热其所有路由的解决方案?

请您参考如下方法:

Java 的类加载是惰性的。这意味着类仅在需要时由 JVM 加载。

如果你想强制它急切地加载类,你只需要引用它们。一种方法是遍历 jar 内容或类文件以获取类名,然后使用它们调用 Class.forName(className)。 .

此外,如果启动时间和性能对您的用例非常重要,您可能需要提前查看编译解决方案,例如 GraalVM ,或降低 JIT 的编译阈值 ( -XX:CompileThreshold )。


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号