2012-08-09 45 views
1

我有下載在德比基地如何減少堆使用的DataNucleus將+德比

問題從服務中的50K批次700K條目,並將它們存儲在Java桌面應用程序是,這隻有當我已設置-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(); 
    } 

回答