我有一個合金模型,在Alloy工具(alloy4.2.jar)中運行時,可以毫無問題地生成實例。但是,當我將這個模型用作Java中Alloy api的輸入時,爲了逐個獲取所有這些實例,一段時間後會產生內存不足錯誤(在出現錯誤之前捕獲了許多實例)。當使用合金API for Java時OutOfMemoryError
在如果命令只是在try命令之後位於(對應於JDolly.java:192在打印堆棧跟蹤進一步)所述在下面的代碼完全發生該錯誤:
@Override
public boolean hasNext() {
// primeira vez
if (firstTime) initializeAlloyAnalyzer();
if (currentAns.satisfiable() && firstTime) {
firstTime = false;
return true;
}
if (maximumPrograms > 0 && maximumPrograms == currentProgram) return false;
boolean result = true;
try {
if (!currentAns.next().satisfiable() || currentAns.equals(currentAns.next())){
result = false;
System.out.println("TARCIANA -- non satisfiable, linha 194");
} else {
currentAns = currentAns.next();
}
} catch (Err e) {
result = false;
e.printStackTrace();
}
return result;
}
的打印堆棧跟蹤這個錯誤是:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at kodkod.util.collections.IdentityHashSet.<init>(IdentityHashSet.java:162)
at kodkod.util.nodes.AnnotatedNode$SharingDetector.sharedNodes(AnnotatedNode.java:278)
at kodkod.util.nodes.AnnotatedNode.<init>(AnnotatedNode.java:92)
at kodkod.util.nodes.AnnotatedNode.annotate(AnnotatedNode.java:114)
at kodkod.engine.fol2sat.Translator.evaluate(Translator.java:104)
at kodkod.engine.Evaluator.evaluate(Evaluator.java:117)
at edu.mit.csail.sdg.alloy4compiler.translator.A4Solution.rename(A4Solution.java:844)
at edu.mit.csail.sdg.alloy4compiler.translator.A4Solution.rename(A4Solution.java:841)
at edu.mit.csail.sdg.alloy4compiler.translator.A4Solution.rename(A4Solution.java:824)
at edu.mit.csail.sdg.alloy4compiler.translator.A4Solution.<init>(A4Solution.java:330)
at edu.mit.csail.sdg.alloy4compiler.translator.A4Solution.next(A4Solution.java:1031)
at ejdolly.JDolly.hasNext(JDolly.java:192)
at org.testorrery.ForLoopIterator.hasNext(ForLoopIterator.java:40)
at refactoringTest.RefactoringTest.runTests(RefactoringTest.java:141)
at refactoringTest.MainRunner.main(MainRunner.java:83)
我覺得這個錯誤的原因可能是同中描述的: CapacityExceededException when reading a very large instance using A4SolutionReader
爲避免此錯誤,有何建議?
什麼是您的-Xms和-Xmx參數?你試圖增加這個應用程序的這個參數? –
當您使用該工具並在Java代碼中調用API時,您是否使用相同的求解器? 你可能想檢查A4Option類 –
嗨,Loic。是的,求解器是一樣的。不同之處在於該工具立即告訴我們發現了實例。我們必須點擊next,next,next才能找到所有的實例。當使用api時,還會找到實例(超過600,000個),然後出現outofmemory錯誤,告訴我解決方案不可滿足。這是我認爲奇怪的。請幫幫我! – Tarciana