Java中的Bug分析
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了Java中的Bug分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中的Bug分析文章都会有所收获,下面我们一起来看看吧。背景15年在中信银行做
千家信息网最后更新 2026年11月01日Java中的Bug分析
这篇文章主要介绍了Java中的Bug分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中的Bug分析文章都会有所收获,下面我们一起来看看吧。
背景
15年在中信银行做持续集成时,由于当时的项目是基于三方采购的 Java 配置开发平台做的,平台自己基于 Ant 插件实现了增量和热部署。
其中有几个项目在持续集成部署时,经常发现 Linux 平台部署成功后(Windows 不会出现,Linux 也是偶发现象),新版本代码并没有生效(反编译 class)。
起初我是在本地 windows 上跟踪调试基于 Ant 插件的代码,但始终重现不了(最后测试发现 Windows 无此 Bug)。
后来,通过分析代码逻辑,其中有段逻辑是通过文件的最后修改时间(File.lastModified())来判断要不要覆盖部署的,最后通过单测发现,是由于 Java 的 File.lastModified() 方法在 Windows 和 Linux/Unix平台获取的精度不一样导致的,Windows 精度为毫秒,而 Linux/Unix 只能到秒(JDK Bug:JDK-8177809)。
所以也解释了,为什么是偶发现象,文件修改时间如果判断的两个值正好跨秒时,部署就是成功的,否则失败。
Bug 重现
测试代码:FileTest.java
import java.io.File;import java.io.IOException;import java.nio.file.Files;import java.text.SimpleDateFormat;public class FileTest { private static final long LM = 1599276952718L; public static void main(String[] args) throws IOException { // java版本号 System.out.println("Java Version:" + System.getProperty("java.version")); File f = new File("test.txt"); f.createNewFile(); // 设置最后修改时间 f.setLastModified(LM); // 获取修改时间,存在 bug System.out.printf("Test f.lastModified [%s]: %b\n",f.lastModified(), f.lastModified() == LM); // 格式化输出,正确不存在 bug System.out.printf("Test f.lastModified DateFormat [%s]\n",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss").format(f.lastModified())); // Files.getLastModifiedTime() 获取修改时间,同样存在 bug System.out.printf("Test Files.getLastModifiedTime [%s]: %b\n",Files.getLastModifiedTime(f.toPath()).toMillis(),(Files.getLastModifiedTime(f.toPath()).toMillis() == LM)); // 格式化输出,正确不存在 bug System.out.printf("Test Files.getLastModifiedTime DateFormat [%s]\n",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss").format(f.lastModified())); f.delete(); }}命令行下编译、执行:
# 编译执行$ javac FileTest.java && java FileTest
Windows 执行结果
Windows 平台不存在此 Bug。
# 编译执行$ javac FileTest.java && java FileTestJava Version:1.8.0_202Test f.lastModified [1599276952718]: trueTest f.lastModified DateFormat [2020-09-05 11:35:52.052]Test Files.getLastModifiedTime [1599276952718]: trueTest Files.getLastModifiedTime DateFormat [2020-09-05 11:35:52.052]
Mac 执行结果
JDK 8 最新版本,目前仍然没有修复该问题。
# 编译执行$ javac FileTest.java && java FileTestJava Version:1.8.0_261Test f.lastModified [1599276952000]: falseTest f.lastModified DateFormat [2020-09-05 11:35:52.052]Test Files.getLastModifiedTime [1599276952000]: falseTest Files.getLastModifiedTime DateFormat [2020-09-05 11:35:52.052]
Linux 执行结果
# 编译执行$ javac FileTest.java && java FileTestJava Version:1.8.0_171Test f.lastModified [1599276952000]: falseTest f.lastModified DateFormat [2020-09-05 11:35:52.052]Test Files.getLastModifiedTime [1599276952000]: falseTest Files.getLastModifiedTime DateFormat [2020-09-05 11:35:52.052]
关于"Java中的Bug分析"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Java中的Bug分析"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
分析
平台
时间
编译
代码
知识
结果
成功
内容
插件
文件
格式
版本
现象
篇文章
精度
逻辑
项目
测试
输出
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网佳科技有限公司
苏州找大状互联网科技有限公司
科技金融是不是互联网金融
高科技与互联网
互联网科技英文
卓越科技(互联网 )
润盈互联网科技
上海万想互联网科技
互联网科技英文翻译
中国互联网金融科技基金
哈尔滨新华互联网科技
成都仁贤领冠互联网科技有限公司
北京大学互联网科技怎么样
互联网系的金融科技公司
中国互联网有什么科技
广州燕处互联网科技有限公司
陕西九四连强互联网科技有限公司
马化腾互联网科技教学
北京品多多互联网科技有限公司
上海旺乐尼互联网科技有限公司
科技互联网政务服务
广州宏创互联网科技
广州互联网络科技有限公司
互联网科技ppt模板
广州紫鲸互联网科技
互联网 科技服务平台
南山科技园互联网公司有哪些
赶超互联网科技 微信多开
互联网科技包装股
互联网科技大佬云集