多くのレベルを持つ巨大なディレクトリで、XSLT2 を使用して XML ファイルを変換したいと考えています。100 万以上のファイルがあり、各ファイルは 4 ~ 10 kB です。しばらくすると、常に java.lang.OutOfMemoryError: Java heap space を受け取ります。
私のコマンドは次のとおりです。 java -Xmx3072M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512M ...
-Xmx にメモリを追加するのは良い解決策ではありません。
ここに私のコードがあります:
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
pushDocuments(file);
} else {
indexFiles.index(file);
}
}
public void index(File file) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
xslTransformer.xslTransform(outputStream, file);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
System.err.println(e.toString());
}
}
net.sf.saxon.s9api による XSLT 変換
public void xslTransform(ByteArrayOutputStream outputStream, File xmlFile) {
try {
XdmNode source = proc.newDocumentBuilder().build(new StreamSource(xmlFile));
Serializer out = proc.newSerializer();
out.setOutputStream(outputStream);
transformer.setInitialContextNode(source);
transformer.setDestination(out);
transformer.transform();
out.close();
} catch (SaxonApiException e) {
System.err.println(e.toString());
}
}