Java Can';t使用Jena编写大型owl文件

Java Can';t使用Jena编写大型owl文件,java,jena,owl,Java,Jena,Owl,我试图将数据库表中包含的数据转换为一组三元组,因此我使用Jena java库编写了一个owl文件。 我已经用少量表记录(100)成功地完成了这项工作,这些记录对应于.owl文件中的近20000行,我对此感到满意 为了编写owl文件,我使用了以下代码(m是一个OntModel对象): 不幸的是,当我尝试对表的整个结果集(800.000条记录)执行相同操作时,eclipse控制台显示了一个异常: Exception in thread "main" java.lang.OutOfMemoryErro

我试图将数据库表中包含的数据转换为一组三元组,因此我使用Jena java库编写了一个owl文件。 我已经用少量表记录(100)成功地完成了这项工作,这些记录对应于.owl文件中的近20000行,我对此感到满意

为了编写owl文件,我使用了以下代码(
m
是一个
OntModel
对象):

不幸的是,当我尝试对表的整个结果集(800.000条记录)执行相同操作时,eclipse控制台显示了一个异常:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
例外情况由

m.write(out);
我绝对肯定模型是正确填充的,因为我尝试在不创建owl文件的情况下执行程序,并且一切正常。 为了修复它,我尝试在
run->configuration->vm arguments
中增加堆内存设置
-Xmx4096M
,但仍然出现错误


我在macbook上执行应用程序,因此没有无限内存。有机会完成任务吗?也许有更有效的方法来存储模型吗?

默认格式是RDF/XML是一个漂亮的表单,但是要计算“漂亮”,在开始编写之前需要做很多工作。这包括建立内部结构。某些形状的数据需要做大量的工作来搜索“最漂亮”的变体

漂亮格式的RDF/XML是最昂贵的格式。即使是漂亮的海龟形态也更便宜,尽管它仍然需要一些准备计算

要以更简单的格式编写RDF/XML,并且没有复杂的功能,请执行以下操作:

RDFDataMgr.write(System.out、m、RDFFormat.RDFXML_PLAIN)

首选输出流,输出将为UTF-8-“
new BufferedWriter(new FileWriter(FILENAME));
”将使用平台默认字符集

有关其他格式和变体,请参见文档:


例如
RDFFormat.TURTLE\u块

将其作为N-Triples写入不起作用?模型有多大,即
m.size()
的输出是多少?模型大小是4827075。任何关于N-Triples的建议都有效!如果可以,您应该选择
N-Triples
作为序列化格式。如果不指定语言,输出将是
RDF/XML
格式,而XML确实需要更多的内存来构建XML树。
m.write(out);