Java编译预热_为什么JVM需要预热?

为什么JVM需要热身?

现代(J)VM在运行时收集统计信息,了解哪些代码最常用以及如何使用。其中一个(如果不是成千上万)例子是对虚拟函数调用的优化(用C++术语),它们只有在实现时才有效。这些统计信息只能在运行时收集。

类加载本身是热身的一部分为好,但它显然是这些类里面的代码执行前会自动进行,所以没有太多的担心

代码的哪些部分应该你热身?

这是你的应用程序的性能是至关重要的组成部分。最重要的部分是“正常地使用它”,正如它在正常使用中使用的方式一样,否则错误的优化将会完成(并在稍后撤消)。

即使我对代码的某些部分进行了预热,它会保持多长时间(假设这个术语仅表示类对象保留在内存中的时间)?

这实在很难说基本上JIT编译器会持续监视执行和性能。如果达到某个阈值,它会尝试优化。然后它将继续监视性能,以验证优化实际上是否有帮助。如果不是,它可能会不优化代码。还有可能发生的事情,无效的优化,如加载新的类。我会考虑那些事情无法预测,至少不是基于计算器的答案,但有工具告诉你的JIT是这样做的:https://github.com/AdoptOpenJDK/jitwatch

它是如何帮助,如果我有需要是对象每次收到活动时创建。

一个简单的例子可能是:您在方法内部创建对象,因为引用会离开方法的范围,这些对象将存储在堆中,并最终被垃圾收集器收集。如果使用这些对象的代码被大量使用,它可能最终以单个大方法进行内联,可能会被重新排序以至于无法识别,直到这些对象仅存在于此方法内。在那时,他们可以放在堆栈上并在方法退出时被删除。这可以节省大量垃圾回收,并且只会在一些热身之后才会发生。所有这些说法:我对一个人需要做任何特殊的热身操作这个概念持怀疑态度。只需启动你的应用程序,并使用它,JIT编译器就可以做到这一点。如果您遇到问题,那么请了解JIT在您的应用程序中所做的工作,以及如何微调该行为或如何编写应用程序以使其最有利。

我真正了解需要热身的唯一情况是基准。因为如果你忽视它,你会得到几乎保证的虚假结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于缓存预热代码案例Java,我可以给您提供一个简单的例子。在Java中,我们可以使用CacheBuilder和LoadingCache来实现缓存预热。 首先,我们需要导入Guava库,然后定义一个LoadingCache: ``` import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; public class CacheExample { private static final LoadingCache<String, String> cache = CacheBuilder.newBuilder() .maximumSize(100) .expireAfterWrite(10, TimeUnit.MINUTES) .build(new CacheLoader<String, String>() { @Override public String load(String key) throws Exception { return "Value for " + key; } }); } ``` 在这个例子中,我们定义了一个最大容量为100的缓存,缓存项在最后一次访问后10分钟过期,缓存值的计算使用了CacheLoader的load方法。 现在,我们可以使用cache.get(key)方法获取缓存中的值。如果缓存中没有该key对应的值,CacheLoader将被调用生成该值并将其缓存: ``` try { String value = cache.get(key); System.out.println("Value: " + value); } catch(ExecutionException e) { System.out.println("Exception: " + e); } ``` 这就是一个简单的缓存预热代码案例Java。当我们首次访问缓存时,CacheLoader将被调用生成该值并将其缓存。这种方式可以提高缓存的命中率,并且减少缓存miss的数量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值