2009-04-23 5 views
9

現在、Runtime.exec()で「ln」コマンドを使用しています。それはうまく動作します。唯一の問題は、このフォークを実行するには、アプリケーションのヒープスペースが2倍必要であることです。私のアプリはヒープサイズが10Gigs前後の64ビットアプリケーションで、スワップ領域がなくなってしまいます。私はこれを解決できる構成を見つけることができませんでした。ハードウェアをJavaで作成する

また、JNIを使​​用したくない場合もあります。 また、この施設はすぐにJava 7で提供されると聞いていました。

+0

少しスローダウン。あなたは何をしようとしていますか、何を試していますか? –

答えて

6

JNA JNIの代わりにJNAを試すことができます(JNAはJNIに比べていくつか明確な利点があります)。はい、チェックしてくださいJSR 203

0

UNIXではなくWindowsを使用できますか? ;)私は、JDK7がforkの代わりにCreateProcessに似たコールを利用できると信じています。

さらに実際的な解決策は、起動後すぐに新しい子プロセスを作成することです。 10gのヒープを使用している場合は、別の小さなJavaプロセスはおそらくそれほど悪くないでしょう。そのプロセスを(ストリームを使用して)execに取得します。

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

コンパイルして実行します。 http://java.sun.com/docs/books/tutorial/essential/io/links.html

10

はおそらく、このサイトは助けになるでしょう!

+1

「@since 1.7」を参照するまで、JavaDocに興奮しています。 – Thilo

+0

@Thiloという意味ですか? – Pacerier

+0

@Pacerier:2009年11月12日、Java 7はどこにもリリースされていませんでした。 – Thilo

4

これはJNAと非常に簡単です:

+0

コンパイルされますが、実行されません。 Windowsではなく、つまり。私はまだJNAが行っている魔法を酔わせていませんでしたが、MSVCRTのそれぞれの機能の名前は非常に異なっているようです。 –

+0

http://stackoverflow.com/questions/6015006/whats-the-name-of-the-create-hard-link-function-in-msvcrtによれば、関数は 'CreateHardLink'と呼ばれ、Kernel32にあります。 MSVCRTではなく(意味があります)。 –

8

それはcreateLinkを使用してJava 7で簡単です。

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

ドキュメントは次のとおりです。http://docs.oracle.com/javase/tutorial/essential/io/links.html –

関連する問題