【发布时间】:2017-12-08 17:06:13
【问题描述】:
我正在尝试将数据库表中包含的数据转换为一组三元组,因此我正在使用 Jena java 库编写一个 owl 文件。 我已经成功完成了少量表记录 (100),对应于 .owl 文件中的近 20.000 行,我对此感到满意。
为了编写 owl 文件,我使用了以下代码(m 是 OntModel 对象):
BufferedWriter out = null;
try {
out = new BufferedWriter (new FileWriter(FILENAME));
m.write(out);
out.close();
}catch(IOException e) {};
不幸的是,当我尝试对表的整个结果集(800.000 条记录)执行相同操作时,eclipse 控制台向我显示了异常:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
异常由
引发m.write(out);
我绝对确定模型已正确填充,因为我尝试在不创建 owl 文件的情况下执行程序并且一切正常。
为了修复它,我尝试增加堆内存设置-Xmx4096Minrun->configuration->vm arguments,但错误仍然出现。
我在 macbook 上执行应用程序,所以我没有无限的内存。有机会完成任务吗?也许有更有效的方法来存储模型?
【问题讨论】:
-
把它写成 N-Triples 不起作用?模型有多大,即
m.size()的输出是多少? -
模型尺寸为 4827075。您对 N-Triples 的任何建议都有效!
-
如果没问题,你应该更喜欢
N-Triples作为序列化格式。如果不指定语言,输出将是RDF/XML格式,而 XML 确实需要更多的内存来构建 XML 树。