Java 7 WatchService对于其他任何人来说都很慢吗?

sbo*_*ook 45 java nio 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)

我认识到OS X OpenJDK端口不确定此功能(请参阅https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Status)

有没有人在生产中成功使用它?

mak*_*akc 35

如果我改变,我会有更好的响应时间

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
Run Code Online (Sandbox Code Playgroud)

folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
Run Code Online (Sandbox Code Playgroud)

  • `StandardWatchEventKinds`现在是`java.nio.file`包的一部分,虽然`SensitivityWatchEventModifier`仍然在Sun私有包下. (3认同)
  • @Paul 当然,但由于它是一个私有包,因此它不能跨不同的 JVM 实现(例如 IBM 的实现)移植。 (2认同)

kar*_*old 29

JDK 7还没有针对MacOS的WatchService的本机实现.它不使用本机文件系统事件,而是使用回退sun.nio.fs.PollingWatchService,它定期遍历文件系统并检查树中每个文件和子目录的最后修改时间戳.我也发现它非常缓慢.

WatchService for Mac有一个原生实现:

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

我自己没试过用它.

  • 在MacOS的JDK 8中仍然如此吗? (7认同)
  • 看起来JDK 9也无法解决这个问题.问题仍然是开放的https://bugs.openjdk.java.net/browse/JDK-7133447,在过去的邮件列表讨论中没有解决方案:http://mail.openjdk.java.net/pipermail/ nio-dev/2014-August/002691.html. (3认同)
  • Java 13 现在有什么变化吗? (3认同)
  • @ben,显然是的.我们仍然遇到问题,因为它很慢并且没有选择所有事件. (2认同)
  • **警告!**我们想使用BarbaryWatchService,但发现它与HighSierra上的** APFS **不能正常工作。我在该项目上提出了一个[issue](https://github.com/gjoseph/BarbaryWatchService/issues/10)。 (2认同)