1
我的應用程序在Windows任務管理器中看到的內存越來越多,並最終因OutOfMemory崩潰。但是,當我使用MemoryValidator(來自www.softwareverify.com)檢查泄漏時,沒有檢測到泄漏。這是爲什麼發生?即使沒有內存泄漏,Windows任務管理器也會顯示進程內存不斷增加
我的應用程序在Windows任務管理器中看到的內存越來越多,並最終因OutOfMemory崩潰。但是,當我使用MemoryValidator(來自www.softwareverify.com)檢查泄漏時,沒有檢測到泄漏。這是爲什麼發生?即使沒有內存泄漏,Windows任務管理器也會顯示進程內存不斷增加
僅僅因爲內存使用量不斷增加並不意味着它必然會「泄漏」。您可以簡單地積累大量的活動對象和/或非常大的活動對象(包含大量和大量數據)。
如果您可以提供更多關於您正在使用的語言和應用程序在做什麼的信息,我可以幫助您獲得更多具體信息!
更新爲每個評論 那麼,你只是想確保垃圾收集正確發生。我會建議libgc庫來幫助解決這個問題。 http://developers.sun.com/solaris/articles/libgc.html
我能想到的唯一另外一個原因就是你無意中在某個地方保持對象的引用,所以它們只是堆積起來。
Mine是一個C++事務應用程序。在交易過程中,它會創建大量對象,並在交易結束時將其刪除。所以內存應該會回到原來的狀態。但在任務管理器中,它不斷增加。 –
@HUGH答覆已更新。 – 2011-07-01 11:18:44
我不需要在C++應用程序中進行垃圾收集,因爲我明確地刪除了不再需要的對象。我只是在互聯網上找到了幾頁,如http://www.codeproject.com/KB/dotnet/BestPractices5.aspx?msg=3605652&display=Mobile#Avoidtaskmanagertodetectmemoryleak,表示任務管理器顯示分配的內存而不是內存正在使用。我想知道我是否錯誤地認爲我的應用程序正在泄漏內存。上面的鏈接告訴使用perfmon來檢查應用程序的私有內存增長,但我無法在「實例」列表中找到我的應用程序。 –