java – 关闭RandomAccessFile有时需要45秒

前端之家收集整理的这篇文章主要介绍了java – 关闭RandomAccessFile有时需要45秒前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的程序中,关闭 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防病毒软件.我不得不安装它…但是如果禁用按访问扫描,问题也会显示出来.

为了唯一的方法来验证它不是防病毒是有人在他的机器上重复测试(没有防病毒),并得到相同的问题,我猜.

原文链接:https://www.f2er.com/java/123035.html

猜你在找的Java相关文章