You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JVM是否会优化该长整型时间运算?求更优实现方案

问题解答

疑问一:JVM是否会将代码优化为long time= getTime()?

不会。JVM的优化始终会保证代码语义不变,你的代码逻辑是先对毫秒时间戳做整除60000L(舍去秒和毫秒部分),再乘回60000L恢复毫秒格式,这和直接返回getTime()的结果在绝大多数场景下都不一致(仅当时间戳刚好是整分钟时才相等)。

举个实际例子:如果getTime()返回1620001234567(对应某分钟的34秒567毫秒),执行(1620001234567 / 60000L) * 60000L会得到1620001200000(整分钟的时间戳),和原时间戳明显不同。JVM不会做出改变代码语义的优化,所以你完全不用担心这个问题。

疑问二:有没有更简洁的实现方式?

你的原写法已经很简洁了,不过还有两种等价的实现可以选择:

  1. 利用取模运算减去余数:

    long time = getTime() - getTime() % 60000L;
    

    这个逻辑是直接减去时间戳中“秒+毫秒”部分的数值,效果和你的原代码完全一致。

  2. 显式使用Math.floorDiv(适合强调“向下取整”语义的场景):

    long time = Math.floorDiv(getTime(), 60000L) * 60000L;
    

    因为getTime()返回的是正数,整数除法本身就等价于floorDiv,所以这个写法和原代码结果相同,只是语义更明确。

这三种写法在性能和结果上没有区别,选哪种取决于你觉得哪种更易读。

内容的提问来源于stack exchange,提问作者mig001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:15:09