我有一个Java程序(战争)在操作大型XML文件时内存不足。 该程序是一个REST API,它通过REST控制器返回被操纵的XML。
首先,程序从远程URL获取XML文件。
然后它替换id
属性的值。
最后,它通过API控制器将新XML返回给调用者。
我从远程URL获得的是带有XML数据的byte[]
正文。
然后,我将其转换为String。
接下来,我对整个字符串执行regexp search-replace。
然后我将其转换回byte[]
。
我猜测XML现在在内存中3次(传入的字节,字符串和传出的字节)。
我正在寻找改进方法。
我在文件系统btw上没有本地副本。
答案 0 :(得分:0)
将字节转换为String后,您可以从内存中删除传入的字节:
byte[] bytes = bytesFromURL;
String xml = new String(bytes);
{...manipulate xml}
bytes = null;
System.gc();
bytes = xml.getBytes();