微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/java/123035.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐