Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在使用TinkerPop时会出现OutOfMemoryException?_Java_Gremlin_Tinkerpop - Fatal编程技术网

Java 为什么在使用TinkerPop时会出现OutOfMemoryException?

Java 为什么在使用TinkerPop时会出现OutOfMemoryException?,java,gremlin,tinkerpop,Java,Gremlin,Tinkerpop,我有一个XML文件,有大约一百万个顶点和边。我想将它们加载到Gremlin服务器中,但在大约20万个节点之后,我在Gremlin服务器中得到一个OUTOfMemoryException。 我尝试了两种不同的方法 GraphTraversal<Vertex, Vertex> verttmp = g.addV(mapprop.get(LABEL)).property(T.id, keyid); verttmp.next(); 有没有一种安全的方法来处理这么多的节点?我假设您在Greml

我有一个XML文件,有大约一百万个顶点和边。我想将它们加载到Gremlin服务器中,但在大约20万个节点之后,我在Gremlin服务器中得到一个OUTOfMemoryException。
我尝试了两种不同的方法

GraphTraversal<Vertex, Vertex> verttmp = g.addV(mapprop.get(LABEL)).property(T.id, keyid);
verttmp.next();

有没有一种安全的方法来处理这么多的节点?

我假设您在Gremlin服务器中从MemoryException中得到了这个
。默认情况下,Gremlin服务器配置了
-Xmx4096m
,这可能不足以满足您正在加载的图形的大小(特别是如果您使用的是TinkerGraph,它是纯内存图形)。您只需在内存中增加
-Xmx
的大小,直到有足够的内存容纳图形。也许从加倍到
8192m
开始,但考虑到你只完成了20%的负载,我想知道加倍是否足够

作为旁注,如果您要丢弃
verttmp.next()
的值(即,在示例代码中,它看起来像您),那么最好执行以下操作:

g.addV(mapprop.get(LABEL)).property(T.id, keyid).iterate()
这将大大降低成本,因为您不会浪费时间返回任何必须序列化并通过网络发送的结果。此外,如果您正在提交脚本(即“query”是
字符串
),那么我可以看出您没有提交脚本。这是一个性能杀手,我可以想象内存需求会大大高于需求,从而导致
OutOfMemoryException
比应该的时间提前很多。修改代码以使用参数,或通过远程遍历发出基于字节码的简单请求:

GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using("localhost",8182,"g"));

我建议您采用字节码方法,这样您就不必进行参数化,让我们将您的小精灵作为代码而不是嵌入字符串来编写。

感谢您的回答,在阅读了ParameterSize Script文章后,我无法理解它是如何工作的?
GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using("localhost",8182,"g"));