Java 使用neo4j embedded时内存问题
我在下面的方法中遇到了outOfMemory异常。有人能帮忙吗 此图为7073455个节点和36549084个关系。我正在使用以下参数运行此程序: -Xmx3072M-XX:+UseConcMarkSweepGC 代码:Java 使用neo4j embedded时内存问题,java,graph,neo4j,Java,Graph,Neo4j,我在下面的方法中遇到了outOfMemory异常。有人能帮忙吗 此图为7073455个节点和36549084个关系。我正在使用以下参数运行此程序: -Xmx3072M-XX:+UseConcMarkSweepGC 代码: getAllTypeNodes拉入图形的百分比是多少 你能分享这个例外吗 您的提交大小是多少 应该是10k到50k左右,但是你也必须为REL增加它,否则,您可能最终的提交大小为x,但您的事务中实际有x*个rels元素。也许您可以将代码拆分为更容易理解的较小方法。getAllTy
getAllTypeNodes拉入图形的百分比是多少 你能分享这个例外吗 您的提交大小是多少
应该是10k到50k左右,但是你也必须为REL增加它,否则,您可能最终的提交大小为x,但您的事务中实际有x*个rels元素。也许您可以将代码拆分为更容易理解的较小方法。getAllTypeNOdes方法返回的节点总数为700个,其中约有600个,我尝试过提交大小为10k、50K、100K。每次都失败了。我正在再次运行它,并将很快发布异常的确切堆栈跟踪。
public Iterable<Node> calculatePa(GraphDatabaseService graphDb) throws Exception {
float pa = 0.0f;
Transaction tx = graphDb.beginTx();
Iterable<Node> allNodes = getAllTypeNodes(graphDb, TERM_NODE);
int counter =0;
HashMap<String, String> starNodemap = new HashMap<String, String>();
PrintWriter pw = new PrintWriter(TERM_STAR_NODE_FILE_PATH);
Iterable<Relationship> pVRels;
Iterable<Relationship> removeRels;
Iterable<Relationship> pVRels2;
Node termNode;
Iterator<Node> termItr = allNodes.iterator();
while(termItr.hasNext()){
termNode = termItr.next();
int sumPV = 0,starNodeCounter = 0;
pVRels = termNode.getRelationships( Direction.OUTGOING, RelTypes.PV);
counter++;
for (Relationship pvRel : pVRels){
sumPV +=Integer.parseInt(pvRel.getProperty(PV).toString());
starNodeCounter++;
}
// to stop executing the rest of the code for this node
if(starNodeCounter > STAR_NODE_TERM_THRESHOLD){
if(isDebug){
pw.println(termNode.getProperty(TERM).toString()+ PIPE +String.valueOf(starNodeCounter));
pw.flush();
}
removeRels = termNode.getRelationships(RelTypes.PV, Direction.OUTGOING );
for (Relationship r : removeRels){
r.delete();
}
termNode.delete();
continue;
}
termNode.setProperty(SUM, sumPV);
pVRels2 = termNode.getRelationships( Direction.OUTGOING, RelTypes.PV);
for (Relationship pvRel : pVRels2 ){
pa = Integer.parseInt(pvRel.getProperty(PV).toString())/(float)sumPV;
pvRel.setProperty(Pa, pa);
}
if(counter == COMMIT_SIZE){
LOGGER.info("Calculated Pa for :::"+counter+"::: at ::"+(new Date()));
LOGGER.info(Runtime.getRuntime().freeMemory()/(1024*1024)+"::: is the free memory before");
tx.success();
tx.close();
tx = graphDb.beginTx();
LOGGER.info(Runtime.getRuntime().freeMemory()/(1024*1024)+"::: is the free memory after");
counter =0;
}
}
if(counter!=0){
tx.success();
}
pw.close();
tx.close();
return allNodes;
}
public Iterable<Node> getAllTypeNodes(final GraphDatabaseService graphDb , String type) {
Iterable<Node> allNodes = null;
try( Transaction tx = graphDb.beginTx() ){
allNodes = GlobalGraphOperations.at(graphDb).getAllNodesWithLabel(DynamicLabel.label(type));
// long n_allNodes = IteratorUtil.count(allNodes);
// LOGGER.info("Count of "+type+"s -->"+n_allNodes);
tx.success();
}
return allNodes;
}