Подтвердить что ты не робот

Является ли Java 7 WatchService медленным для кого-то еще?

WatchService выглядит как отличная технология, но она слишком медленная, чтобы быть полезной в системах OS X и Linux, на которых я тестировал. Чтобы добавить оскорбление к травме, оно, похоже, не получает уведомления обо всех событиях.

Это случай как с моим собственным кодом, так и с каноническим примером из Oracle. (http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java)

Я понимаю, что порт OSJ OpenJDK не уверен в этой функции (см. https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Status)

Кто-нибудь успешно использовал это в производстве?

4b9b3361

Ответ 1

У меня гораздо лучшее время отклика, если я изменяю

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

к

folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);

Ответ 2

JDK 7 еще не имеет встроенной реализации WatchService для MacOS. Вместо того, чтобы слушать собственные события файловой системы, он использует резервную sun.nio.fs.PollingWatchService, которая периодически обходит файловую систему и проверяет последнюю измененную метку времени каждого файла и подкаталога в дереве. Я также обнаружил, что это необычно медленно.

Существует встроенная реализация WatchService для Mac:

http://code.google.com/p/barbarywatchservice/

Я не пытался сам его использовать.