いくつかの大きな XML ファイルを読み取り、それらをデータベースに格納しています。800MB前後です。
多くのレコードを保存してから終了し、例外を発生させます。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.IdentityHashMap.resize(Unknown Source)
at java.util.IdentityHashMap.put(Unknown Source)
Memory Analyzer を使用して、次のような .hprof ファイルを作成しました。
76,581 instances of "java.lang.String", loaded by "<system class loader>" occupy 1,04,34,45,504 (98.76%) bytes.
Keywords
java.lang.String
値を取得するためのセッターとゲッターがあります。この問題を解決するにはどうすればよいですか。どんな助けでも感謝されます。
JREを使用してメモリを増やしました。に。しかし、問題は解決しません
編集: XML ファイルを読み取るために scireumOpen を使用しています。
私が使用したコード例:
public void readD() throws Exception {
XMLReader reader = new XMLReader();
reader.addHandler("node", new NodeHandler() {
@Override
public void process(StructuredNode node) {
try {
obj.setName(node
.queryString("name"));
save(obj);
} catch (XPathExpressionException xPathExpressionException) {
xPathExpressionException.printStackTrace();
} catch (Exception exception) {
exception.printStackTrace();
}
}
});
reader.parse(new FileInputStream(
"C:/Users/some_file.xml"));
}
public void save(Reader obj) {
try {
EntityTransaction entityTransaction = em.getTransaction();
entityTransaction.begin();
Entity e1=new Entity;
e1.setName(obj.getName());
em.persist(e1);
entityTransaction.commit();
} catch (Exception exception) {
exception.printStackTrace();
}
}