我正在努力从现有的 Java 代码库中删除所有系统调用。我们在商业提供的闭源 JVM 中运行我们的应用程序。当 JVM 通过 getRuntime.exec() 进行系统调用时,java 调用整个 JVM 进程分叉,这会导致严重的性能损失。我们在 linux 平台上运行,但理想情况下尽量保持可移植性。
我在替换我们当前通过 getRuntime.exec() 方法使用的 sync() 调用时遇到了问题。我知道还有这个sync() 方法和flush()。根据这篇文章,我希望对所有打开的文件流进行同步和刷新。
我的问题是我不直接知道那里有哪些文件流和描述符。我认为解决这个问题的一种方法是检查 /proc/(jvm 进程号)/fd 文件夹,但我找不到使用纯 java 可靠地获取 JVM 进程号的好方法。我认为我可能能够获取某个类(FileDescriptor 类)的所有对象,但从我正在阅读的内容来看,这也是不可行的。
有没有人有关于如何在纯 java 中复制 *nix sync() 调用的建议?