我阅读了这篇文章,解释了Guava Cache:CachesExplained.我确实理解了refreshAfterWrite和expireAfterWrite正在做什么.但是,在解释refreshAfterWrite时,该文档还提到了这一点:
" 因此,例如,您可以在同一缓存上指定refreshAfterWrite和expireAfterWrite,这样只要条目有资格进行刷新,条目上的到期计时器就不会被盲目重置,因此如果条目之后没有查询条目有资格刷新,允许过期. "
这是令我困惑的部分.根据我的理解,如果您想要自动刷新密钥,您只需要指定refreshAfterWrite.为什么我们甚至想在使用refreshAfterWrite时使用expireAfterWrite?
给出以下方法:
Long getLong() {
...
}
Run Code Online (Sandbox Code Playgroud)
如果我调用它并将返回值分配给这样的变量:
long abc = getLong();
Run Code Online (Sandbox Code Playgroud)
会Long生成一个对象然后转换为 long 还是 Java 足够聪明以避免生成中间Long对象?或者它实际上可能取决于getLong()?
我问这个的原因是包装对象的大小通常比相应的原始类型大小大得多。如果我必须多次调用此方法,并且每次都需要为Long对象分配内存,则程序最终将消耗比实际需要更多的内存,从而触发更多的 GC 周期。
此外,我如何验证执行时发生的确切步骤long abc = getLong()(基本上也在寻找有关如何获得上述问题的答案的指导)?