Java 由于GC开销,Jena节俭
在我的程序中,我通过Thrift和RDFDataMgr对Jena(2.13.0)数据集图进行了大量序列化和反序列化,但在某一点上,我遇到了OutOfMemory异常。有人能帮我找到这个问题吗Java 由于GC开销,Jena节俭,java,garbage-collection,jena,thrift,Java,Garbage Collection,Jena,Thrift,在我的程序中,我通过Thrift和RDFDataMgr对Jena(2.13.0)数据集图进行了大量序列化和反序列化,但在某一点上,我遇到了OutOfMemory异常。有人能帮我找到这个问题吗 OutOfMemoryError: GC overhead limit exceeded at java.io.BufferedOutputStream.<init>(BufferedOutputStream.java:76) at org.apache.jena.riot.thrift
OutOfMemoryError: GC overhead limit exceeded
at java.io.BufferedOutputStream.<init>(BufferedOutputStream.java:76)
at org.apache.jena.riot.thrift.TRDF.protocol(TRDF.java:72)
at org.apache.jena.riot.thrift.StreamRDF2Thrift.<init>(StreamRDF2Thrift.java:55)
at org.apache.jena.riot.thrift.BinRDF.streamToOutputStream(BinRDF.java:103)
at org.apache.jena.riot.thrift.WriterDatasetThrift.write(WriterDatasetThrift.java:53)
at org.apache.jena.riot.RDFDataMgr.write$(RDFDataMgr.java:1331)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:1205)
at org.apache.jena.riot.RDFDataMgr.write(RDFDataMgr.java:1195)
实际上,我正在使用Spark和Flink来运行复杂的mapreduce作业,并使用DatasetGraph的精简序列化来序列化许多组四边形。我使用最多的方法是:
public static void ser(DatasetGraph dsg, byte[] b, Lang l) {
InputStream is = new ByteArrayInputStream(b);
RDFDataMgr.read(dsg, is, l);
closeStream(is);
dsg.close();
}
及
你检查了这些链接和这个链接了吗?是的,我将-Xmx从6增加到了10,并向VM添加了GC选项,但问题仍然存在。在序列化较少的情况下,在数据量相同的情况下,一切都正常工作您正在读取和序列化的RDF结构有多大?您使用的是哪种收集器?如果看不到显示问题的实际代码的最小示例,任何人都不可能给出真正的答案。目前的问题所能得到的只是指向调优JVM参数的指针(正如您已经得到的),而您已经声明在您的用例中并没有真正的帮助。
public static void ser(DatasetGraph dsg, byte[] b, Lang l) {
InputStream is = new ByteArrayInputStream(b);
RDFDataMgr.read(dsg, is, l);
closeStream(is);
dsg.close();
}
public static DatasetGraph deser(byte[] b, Lang l) {
DatasetGraph ret = DatasetGraphFactory.createMem();
InputStream is = new ByteArrayInputStream(b);
RDFDataMgr.read(ret, is, l);
closeStream(is);
return ret;
}