在java中创建硬链接

时间:2009-04-23 19:01:04

标签: java operating-system

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

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

5 个答案:

答案 0 :(得分:10)

答案 1 :(得分:9)

使用createLink

在Java 7中很容易
Files.createLink(Paths.get("newlink"), Paths.get("existing"));

答案 2 :(得分:6)

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

答案 3 :(得分:4)

使用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]);
}

编译并运行!

答案 4 :(得分:0)

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

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