Java util Preferences每隔30秒就会不断地访问磁盘



我们的应用程序使用java.util.prefs.Preferences类来存储一些用户数据字段。下面是我们的preferences类的代码片段。我们的首选项的存储工作正常,但我们注意到,首选项大约每30秒就会进行一次磁盘访问。有没有办法在首选项类中禁用这些后台磁盘访问?(.userRootModeFile.root大约每30秒更改一次)

public class NtapPreferences {
private static Preferences prefs = Preferences.userRoot(); //.systemRoot();
/** Prepends "NTAP.<applicationName>." to 'key' for system-wide uniqueness. */
private static String getKeyForApp ( String key ) {
    return "NTAP." + Application.getApplicationName() + "." + key;
}
/**
 * Returns the application preference value for 'key'.<br/>
 * <br/>
 * If 'key' is not a defined preference, then 'def' is returned.
 */
public static String get ( String key, String def ) {
    return prefs.get(getKeyForApp(key), def);
}
/** Sets the application preference value for 'key' as 'value'. */
public static void put ( String key, String value ) {
    //TODO how do we want to resolve failures to put data in the preferences?
    try {
        prefs.put(getKeyForApp(key), value);
        prefs.flush();
    } catch (NullPointerException e) {
        LOG.error(NtapPreferences.class, e);
    } catch (IllegalArgumentException e) {
        LOG.error(NtapPreferences.class, e);
    } catch (IllegalStateException e) {
        LOG.error(NtapPreferences.class, e);
    } catch (BackingStoreException e) {
        LOG.error(NtapPreferences.class, e);
    }
}
/** Removes the application preference value for 'key' if one is defined. */
public static void remove ( String key ) {
    prefs.remove(getKeyForApp(key));
}

}

此行为由名为"java.util.prefs.syncInterval"的系统属性控制。它将同步之间的间隔(以秒为单位)作为一个整数(int)值字符串。你不能完全关闭同步,但你可以将间隔设置为一个非常大的值。。。尽管由于代码将间隔转换为毫秒的方式,存在597天的上限(我/我们认为)。

参考:

  • http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/prefs/FileSystemPreferences.java?av=f

最新更新