簡體   English   中英

清理Java 8中的鎖(.lck)文件

[英]Cleaning up lock (.lck) files in Java 8

看來Java 8改變了鎖文件的處理方式,這使我積累了很多.lck文件。

我想通過在我的應用程序中添加一些代碼以在每次運行時清除輸出目錄中的鎖定文件來解決此問題。 Java但是不會打開此文件,這意味着如果我打開應用程序的第二個實例(常見用例),那么這將導致它刪除鎖定文件並在嘗試與其他應用程序重用相同的日志文件時立即掛起。實例。

有沒有人以更優雅的方式減輕這種壓力?


確認這是至少8u25的錯誤。 錯誤的行為在oracle 8u40 JRE中消失了。

Java 8中的java.util.logging.FileHandler是否損壞? 更新您的JDK 8以更新40或更高版本 ,其中包含針對JDK-8048020修復程序

您應該期望在FileHandler打開時看到鎖定文件。 如果您看到它們在VM退出后仍然存在,那是因為FileHandler未關閉,VM在運行處理程序關閉掛鈎時停止或崩潰,或者是在嘗試刪除它們時發生了I / O異常。

在實現FileHandler使用的FileLock時,您正在運行的平台也扮演着角色。 FileLock文檔附帶以下警告:

鎖定是否實際阻止其他程序訪問鎖定區域的內容取決於系統,因此未指定。 某些系統的本機文件鎖定功能僅是建議性的,意味着程序必須協作遵守已知的鎖定協議才能保證數據完整性。 在其他系統上,本機文件鎖定是強制性的,這意味着,如果一個程序鎖定了文件的某個區域,則實際上會阻止其他程序以違反該鎖定的方式訪問該區域。 在其他系統上,本機文件鎖定是建議性的還是強制性的,則可以按文件配置。 為確保跨平台的行為一致且正確,強烈建議將此API提供的鎖當作咨詢鎖使用。

這意味着FileHandler在不同平台上可以具有不同的鎖定行為。

與鎖定文件也有關的是記錄器的垃圾回收,它們不會關閉附加的處理程序。 JDK-8060132涵蓋了這些問題在logging.properties中的抽象節點上配置的處理程序並非總是正確關閉的,並且JDK-6274920: JDK logger強烈引用java.util.logging.Logger實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM