91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的Bug分析

發布時間:2022-02-21 16:52:20 來源:億速云 閱讀:168 作者:iii 欄目:開發技術

這篇文章主要介紹了Java中的Bug分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java中的Bug分析文章都會有所收獲,下面我們一起來看看吧。

背景

15年在中信銀行做持續集成時,由于當時的項目是基于三方采購的 Java 配置開發平臺做的,平臺自己基于 Ant 插件實現了增量和熱部署。

其中有幾個項目在持續集成部署時,經常發現 Linux 平臺部署成功后(Windows 不會出現,Linux 也是偶發現象),新版本代碼并沒有生效(反編譯 class)。

起初我是在本地 windows 上跟蹤調試基于 Ant 插件的代碼,但始終重現不了(最后測試發現 Windows 無此 Bug)。

后來,通過分析代碼邏輯,其中有段邏輯是通過文件的最后修改時間(File.lastModified())來判斷要不要覆蓋部署的,最后通過單測發現,是由于 JavaFile.lastModified() 方法在 WindowsLinux/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 FileTest
Java Version:1.8.0_202
Test f.lastModified [1599276952718]: true
Test f.lastModified DateFormat [2020-09-05 11:35:52.052]
Test Files.getLastModifiedTime [1599276952718]: true
Test Files.getLastModifiedTime DateFormat [2020-09-05 11:35:52.052]

Mac 執行結果

JDK 8 最新版本,目前仍然沒有修復該問題。

# 編譯執行
$ javac FileTest.java && java FileTest
Java Version:1.8.0_261
Test f.lastModified [1599276952000]: false
Test f.lastModified DateFormat [2020-09-05 11:35:52.052]
Test Files.getLastModifiedTime [1599276952000]: false
Test Files.getLastModifiedTime DateFormat [2020-09-05 11:35:52.052]

Linux 執行結果

# 編譯執行
$ javac FileTest.java && java FileTest
Java Version:1.8.0_171
Test f.lastModified [1599276952000]: false
Test f.lastModified DateFormat [2020-09-05 11:35:52.052]
Test Files.getLastModifiedTime [1599276952000]: false
Test Files.getLastModifiedTime DateFormat [2020-09-05 11:35:52.052]

關于“Java中的Bug分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Java中的Bug分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新乐市| 大英县| 恭城| 蓬安县| 长岭县| 鄂伦春自治旗| 龙海市| 阿克苏市| 苍南县| 木兰县| 岳阳市| 织金县| 株洲市| 富阳市| 鸡泽县| 惠水县| 六安市| 榆中县| 金沙县| 独山县| 庆阳市| 康乐县| 双柏县| 盐源县| 尉犁县| 洛扎县| 登封市| 郑州市| 普兰店市| 建瓯市| 沧州市| 和静县| 毕节市| 海宁市| 花莲县| 乐都县| 天台县| 外汇| 中西区| 周口市| 漾濞|