有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中创建硬链接的操作系统

目前我通过Runtime.exec()使用“ln”命令。它很好用。唯一的问题是,为了实现这个fork,我们需要两倍于应用程序的堆空间。我的应用程序是一个64位应用程序,堆大小约为10Gig,因此其交换空间不足。我找不到任何可以修复此问题的配置

我也不想用JNI来做同样的事情。 我还听说这个设施很快将在Java7中提供


共 (5) 个答案

  1. # 1 楼答案

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

    一个更实际的解决方案是在开始后不久创建一个新的子进程。如果您使用的是10g堆,那么另一个小型Java进程可能不会那么糟糕。将该进程(通过使用流)发送给exec

  2. # 2 楼答案

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

  3. # 3 楼答案

    在Java 7中使用createLink很容易:

    Files.createLink(Paths.get("newlink"), Paths.get("existing"));
    
  4. # 5 楼答案

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

    编译并运行