2014-02-25 86 views
1

我使用的功能Files.walkfiletree()java.NIO,我找了一個非常大的樹,所以當我運行應用程序在第一時間(與第一次我的意思是每一個我打開我的電腦上的時間)的應用程序需要一些時間,但第二時間真的很快。 爲什麼?有些緩存工作?我能以某種永久性的方式使用它嗎?爲什麼WalkingFileTree第二次更快?

回答

2

當您從文件系統中讀取數據,該信息被緩存使得再次訪問它的速度要快得多。在某些情況下快100倍或更多。它將數據緩存在內存中,因爲速度更快。

最簡單的辦法是訪問/你需要它之​​前加載此目錄結構,你會得到緩存的性能。例如你可以在啓動時做到這一點。

另一個解決方案是獲得更快的SSD。訪問文件結構會執行大量的磁盤操作來獲取所有信息。 HDD可以達到120 IOPS,便宜的SSD可以達到40,000 IOPS,快速的SSD可以達到250,000 IOPS。這可以大大縮短加載此信息的時間。

不過,既然你無法控制在內存中,除非重複訪問它,它可能會在以後推出的磁盤緩存。

+1

這是我猜到的,希望是一些「java機制」。我正在查看我的公司文件系統,以便在RAID5中使用硬盤達到數百TB。我試圖避免它,但我將不得不實施一些索引或數據庫。 – PeterRip

+0

@ user3084798您維護的某種索引聽起來像是個好主意。硬盤只能旋轉得如此之快,大多數RAID-5系統都是針對吞吐量設計的,而不是改進隨機訪問,所以在典型的硬盤RAID-5中可能會獲得大約400 IOPS。如果可以,請將您的數據庫存儲在SSD上;) –

+0

乾杯,您現在告訴我的老闆;)。 – PeterRip

相關問題