在大型文件(此处为35GB)上:
Files.deleteIfExists(Path.get("large.csv"));
使用java删除需要>60。删除控制台上的rm large.csv,请稍等。
为什么?我能在java中加速大文件的删除吗?
发布于 2019-10-22 10:50:16
我会把这归咎于操作系统。在Windows和Linux上,Java简单地调用OS提供的C本地运行时库提供的方法来删除文件。
(检查OpenJDK源代码。)
那么,为什么操作系统需要很长时间才能删除一个大文件呢?
。
简而言之,当您删除一个巨大的文件时,有许多“磁盘”I/O要做。操作系统是这样做的,而不是Java。
那么为什么从命令行删除文件会更快呢?
一个可能的原因是,您使用的rm命令实际上只是将已删除的文件移动到一个垃圾文件夹。这实际上是一个重命名操作,它比真正的删除要快得多。
注意:这不是rm在Linux上的正常行为。
另一个可能的原因(在Linux上)是,您要删除的文件的索引和空闲映射块在一个测试场景中的缓冲区缓存中,而不是在另一个测试场景中。(如果您的机器丢失了空闲RAM,Linux操作系统将在RAM中缓存磁盘块以提高性能。(效果不错。)
https://stackoverflow.com/questions/58501658
复制相似问题