在java中创建硬链接

目前我通过Runtime.exec()使用’ ln ‘命令。 它工作正常。 唯一的问题是,为了做这个fork,我们需要两倍的应用程序堆空间。 我的应用程序是一个64位的应用程序,堆大小约10Gigs,因此它的交换空间耗尽。 我找不到任何可以解决此问题的配置。

我也想不要使用JNI。 我也听说过这个设施很快将在java 7中提供。

你可以试用JNA代替JNI(JNA比JNI有明显的优势); 是的,检查JSR 203

也许这个网站会有所帮助: http : //java.sun.com/docs/books/tutorial/essential/io/links.html

使用createLink在Java 7中很容易:

 Files.createLink(Paths.get("newlink"), Paths.get("existing")); 

使用JNA非常容易:

 public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class); int link(String fromFile, String toFile); } public static void main(String[] args) { CLibrary.INSTANCE.link(args[0], args[1]); } 

编译并运行!

您可以使用Windows而不是UNIX吗? ;)我相信JDK7将使用类似于CreateProcess的调用而不是fork(如果可用)。

一个更实际的解决方案是在启动后立即创建一个新的子进程。 如果你使用10g堆,另一个小的Java进程可能不会那么糟糕。 获得该过程(通过使用流)来执行。