目前我通过ln
使用“Runtime.exec()
”命令。它工作正常。唯一的问题是,为了做这个fork,我们需要两倍的应用程序堆空间。我的应用程序是一个64位的应用程序,堆大小约10Gigs,因此它的交换空间耗尽。我找不到任何可以解决此问题的配置。
我也想不要同样使用JNI。 我也听说过这个设施很快将在java 7中提供。
答案 0 :(得分:10)
答案 1 :(得分:9)
使用createLink:
在Java 7中很容易Files.createLink(Paths.get("newlink"), Paths.get("existing"));
答案 2 :(得分:6)
答案 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进程可能不会那么糟糕。获得该过程(通过使用流)来执行。