我有一个Java桌面应用程序,可以从服务中以50K的批量下载700K条目,并将它们存储在Derby基础中
问题是这只有在我设置-Xmx1024时才有效,否则应用程序会因堆错误消息而崩溃。虽然数据库的最终大小约为100M
请您建议一种优化以下代码以减少内存使用的方法
执行下载的代码非常类似于
public static final void getItems() {
ItemsRequest req = new ItemsRequest();
Gson g = new Gson();
int next_index_to_read = 0;
int max_read_entry_count = 50000;
req.setLimit(max_read_entry_count);
ItemsResponse resp = null;
do{
resp = g.fromJson(postRequest(g.toJson(req)), ItemsResponse.class);
resp.saveItems();
next_index_to_read += max_read_entry_count;
req.setFrom(next_index_to_read);
}while(resp.getTotalItemsEntryCount()>next_index_to_read);
}
负责保存数据的代码是
public class ItemsResponse
public void saveItems() {
PersistenceManagerFactory pmf = PMF.getPmf();
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
if (data != null) {
for (Item item : data) {
Item item = null;
try {
item = pm.getObjectById(Item.class, item.getItemId());
} catch (Exception e) {
continue;
}
pm.makePersistent(item);
}
}
tx.commit();
} catch (Exception e) {
Logger.getLogger("com.example").error("ItemResponse.saveData", e);
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
pm.close();
}