2010-08-11 20 views
4

我正在寫一個媒體轉碼服務器,其中我需要移動文件系統中的文件,直到現在我處於使用java renameTo可以被別的東西替代的困境,這會讓我更好性能。我正在考慮使用exec(「mv file1 file2」),但這將是我最後一次打賭。 任何人都有類似的經歷或可以幫助我找到解決方案?java文件移動高性能

+0

如何調用調用系統調用的API比執行調用相同系統調用的程序要慢? – EJP 2010-08-12 01:38:52

回答

8

首先,renameTo可能只是包裝系統調用。其次,移動文件並不涉及從文件本身(至少在unix中)複製任何數據。發生的一切就是刪除舊目錄中的鏈接,並添加新目錄中的鏈接。我不認爲你會在這裏找到任何性能改進。

+0

許多Un * x系統配備了多個分區(或者在同一個硬盤上,或者分佈在多個硬盤上),並且確實從一個分區移動到另一個分區需要從文件本身複製數據;) – NoozNooz42 2010-08-11 21:36:05

+0

@ NoozNooz42: OP說他想「移動文件系統中的文件」,而不是從一個文件系統移動到另一個文件系統。 – danben 2010-08-11 23:01:52

+1

有沒有一個地方我可以看到執行java renameTo的代碼調用? – 2010-08-12 19:11:05

1

我不認爲使用文件的默認方法有一個(可提及的)性能損失,因爲大部分JVMtoOS函數已經封裝了本地調用。

唯一需要執行exec的情況是,如果您想使用與程序不同的權限執行某些操作或使用特殊工具來複制/移動文件。 (例如,當涉及NTFS連接時的智能移動)

0

如果重命名是一個重要的性能瓶頸,那麼您需要改進硬件,因爲這是您的主要障礙。該軟件是花費在時間上的微不足道的部分,優化它幾乎沒有什麼區別。

什麼是你的磁盤配置?它如何針對寫入進行優化?