java – 关闭RandomAccessFile有时需要45秒
发布时间:2020-12-14 05:15:14 所属栏目:Java 来源:网络整理
导读:在我的程序中,关闭 java.util.RandomAccessFile有时需要45秒(几乎恰好在44.998和45.003秒之间).该程序创建和关闭大量小文件.通常关闭文件非常快(0到0.1秒之间).如果我调试该程序,它将被粘贴在本地方法RandomAccessFile.close0中. 当使用FileOutputStream而不
在我的程序中,关闭
java.util.RandomAccessFile有时需要45秒(几乎恰好在44.998和45.003秒之间).该程序创建和关闭大量小文件.通常关闭文件非常快(0到0.1秒之间).如果我调试该程序,它将被粘贴在本地方法RandomAccessFile.close0中.
当使用FileOutputStream而不是RandomAccessFile(在这种情况下,程序在本地方法FileOutputStream.close0中被阻止)时,也会出现同样的问题. 有人有想法可能是什么?你可以重现系统上的问题(我只能在Mac上重现,而不是在Windows XP上,我还没有在Linux上测试)? 更新2: 这仅仅是在Mac OS X上发生.我使用JDK 1.6.0_22-b04.它发生在32位和64位.在Windows XP上似乎并没有发生. 我的测试用例是: import java.io.File; import java.io.RandomAccessFile; public class TestFileClose { public static void main(String... args) throws Exception { for (int i = 0; i < 100000; i++) { String name = "test" + i; RandomAccessFile r = new RandomAccessFile(name,"rw"); r.write(0); long t = System.currentTimeMillis(); r.close(); long close = System.currentTimeMillis() - t; if (close > 200) { System.out.println("closing " + name + " took " + close + " ms!"); } if (i % 2000 == 0) { System.out.println("test " + i + "/100000"); } new File(name).delete(); } } } 在我的机器上输出示例: test 0/100000 test 2000/100000 test 4000/100000 test 6000/100000 test 8000/100000 test 10000/100000 closing test10030 took 44998 ms! test 12000/100000 test 14000/100000 test 16000/100000 closing test16930 took 44998 ms! test 18000/100000 test 20000/100000 解决方法
这可能是我的机器上安装的McAfee防病毒软件.我不得不安装它…但是如果禁用按访问扫描,问题也会显示出来.
为了唯一的方法来验证它不是防病毒是有人在他的机器上重复测试(没有防病毒),并得到相同的问题,我猜. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |