为同时运行的多个批处理文件创建共享内存

时间:2013-07-20 08:29:21

标签: java batch-file shared-memory pos-tagger

我正在尝试通过批处理文件为不同的文件运行标记器。这是我的代码:

String runap1="cd spt1"+"\n"+"java -Xss8192K -Xms128m -Xmx640m -classpath stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTagger -model models/bidirectional-wsj-0-18.tagger -textFile "+fff[g]+">tag\\"+r1+"\nexit" ;

FileWriter fw1 = new FileWriter("ac.bat");
BufferedWriter bw1 = new BufferedWriter(fw1);

bw1.write(runap1);
bw1.close();

Runtime rx = Runtime.getRuntime();
Process p = null;

try {
    p = rx.exec("cmd.exe /c start ac.bat");
} catch(Exception e) {
    System.out.println("Error");
} // TODO

try {
    Thread.sleep(15000);
} catch (InterruptedException e) {
    System.out.println("Thread interrupted");
}

这需要很长时间才能处理,我的电脑会挂起几次。我想为标记器创建一个共享内存,只加载一次 所有批处理文件都将使用该共享标记器;他们不应该每次加载标记器。 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果将数据存储在内存映射文件中,则可以跨进程多次加载数据而无需其他副本。您甚至可以在一个流程中进行更改,而不是在另一个流程中进行更改。

这个问题是你必须处理堆内存。如果数据文件已经是您可以使用的二进制形式,则这种方法最简单。即你不需要解析它。