pascal-lab/Tai-e

Configure the analyse startup method to avoid OOM `OutOfMemoryError`

michaelphop opened this issue · 1 comments

I am analyzing a very large project (cs:2-type).
After few hours of analysis I get OOM: Java heap space.

Attached the stack trace:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at pascal.taie.util.collection.SparseBitSet.getOrCreateBlock(SparseBitSet.java:1023)
	at pascal.taie.util.collection.SparseBitSet.set(SparseBitSet.java:193)
	at pascal.taie.util.collection.GenericBitSet.add(GenericBitSet.java:73)
	at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:336)
	at pascal.taie.util.collection.GenericBitSet.addAll(GenericBitSet.java:105)
	at pascal.taie.util.collection.AbstractHybridSet.addAll(AbstractHybridSet.java:183)
	at pascal.taie.analysis.pta.pts.DelegatePointsToSet.addAll(DelegatePointsToSet.java:52)
	at pascal.taie.analysis.pta.pts.HybridBitPointsToSet.addAll(HybridBitPointsToSet.java:32)
	at pascal.taie.analysis.pta.core.solver.WorkList.addEntry(WorkList.java:53)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver.addPointsTo(DefaultSolver.java:796)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver.lambda$propagate$2(DefaultSolver.java:404)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver$$Lambda$401/0x0000000801312118.accept(Unknown Source)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver.lambda$propagate$3(DefaultSolver.java:403)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver$$Lambda$400/0x0000000801311ee0.accept(Unknown Source)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at java.base/java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1092)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver.propagate(DefaultSolver.java:401)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver.analyze(DefaultSolver.java:335)
	at pascal.taie.analysis.pta.core.solver.DefaultSolver.solve(DefaultSolver.java:262)
	at pascal.taie.analysis.pta.PointerAnalysis.runAnalysis(PointerAnalysis.java:127)
	at pascal.taie.analysis.pta.PointerAnalysis.analyze(PointerAnalysis.java:113)
	at pascal.taie.analysis.pta.PointerAnalysis.analyze(PointerAnalysis.java:70)
	at pascal.taie.analysis.AnalysisManager.runProgramAnalysis(AnalysisManager.java:155)
	at pascal.taie.analysis.AnalysisManager.runAnalysis(AnalysisManager.java:142)
	at pascal.taie.analysis.AnalysisManager.lambda$execute$0(AnalysisManager.java:107)
	at pascal.taie.analysis.AnalysisManager$$Lambda$264/0x00000008012c1cc8.get(Unknown Source)
	at pascal.taie.util.Timer.runAndCount(Timer.java:94)
	at pascal.taie.analysis.AnalysisManager.lambda$execute$1(AnalysisManager.java:104)
	at pascal.taie.analysis.AnalysisManager$$Lambda$263/0x00000008012c1870.accept(Unknown Source)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at pascal.taie.analysis.AnalysisManager.execute(AnalysisManager.java:103)

Firstly check your startup method based on #14. Then make sure that the memory of your machine is enough to analyze so large project.