2

請問你們能幫我找到內存泄漏嗎?我來自C++世界,Java中的內存泄漏對我來說有點奇怪,因爲根據我的代碼,我不保留對臨時對象的引用。將對象持久保存到GAE數據存儲區後內存泄漏

我正在使用GAE SDK 1.6.1和Objectify 3.1。

我有以下在GAE dev服務器的後端實例中執行的方法(這可能與問題無關)。

private void loadProtoBufdata() throws Exception 
{ 
    ObjectifyDAO dao = new ObjectifyDAO(); 

    for (long count = 0; count < 100; ++count) 
    { 
     Visitor visitor = new Visitor(); 
     visitor.setKey(count + 1); 
     dao.ofy().put(visitor); 
    } 

    dao = null; 
} 

在ObjectifyDAO的構造函數中它被初始化爲

public ObjectifyDAO() 
{ 
    super(new ObjectifyOpts().setSessionCache(false).setGlobalCache(false)); 
} 

而且Visitor很簡單,只要

public class Visitor 
{ 
    @Id 
    Long key; 
    Long ek; 
    @Unindexed String ip; 
    Date t; 
    @Unindexed Long lzVisit; 
} 

我用的JProfiler 7.0.1捕捉內存泄漏。運行此代碼後,我有幾兆字節的com.google.storage.onestore.v3.OnestoreEntity$PropertyValuecom.google.storage.onestore.v3.OnestoreEntity$Property

我不想炸掉這篇文章,所以我上傳了JProfiler的截圖。

參考樹是here。分配樹是here

我在Objectify的跟蹤器上發現了this bug,在Google Ground for GAE上發現了this thread。所以我不確定這是誰的錯誤。

問題是:

1)如何避免內存泄漏? 2)它是否在生產中發生?

謝謝!

PS。尼克,我知道你在讀這個。請幫助:)

+0

[爲什麼在開發服務器上使用DataStore API時發生內存泄漏(未在生產環境中測試過)?](http://stackoverflow.com/questions/8843975/why-memory-leaks-occurs-when-using -datastore-API-上-DEV-服務器未測試功能於PR) – expert 2012-01-13 00:01:17

回答