2016-03-01 56 views
2

我開發了一款遊戲libgdx。我試圖通過執行以下操作來儘可能降低內存消耗:非常高的「最大內存使用」libgdx遊戲

  1. 如果可能,請使用Pooling
  2. 限制SpriteBatchsize

當我從Android Studio我的手機(Nexus 5X保護)上運行的遊戲,我的遊戲流暢運行,看來內存消耗確實是合理的:內存消耗通常是在23MB (我通過memory monitor看到這個)。然而,當我去到內存選項卡在我的手機(設置 - >內存 - >應用程式所使用的內存),我看到以下內容: enter image description here

的1.2 一個令人震驚的「最大內存使用」 GB爲我的比賽。高於任何其他應用程序。

我的問題(S):

  • 是什麼號碼是什麼意思?這是否意味着我的遊戲一度佔用了1.2 GB的內存?
  • 如果內存監視器從未顯示超過25MB的消耗量,那怎麼可能?
  • 如果我試圖讓這個數字下降,看到遊戲運行順利嗎?如果是的話,我該怎麼做?

回答

2

你混淆本機內存(RAM,如圖所示的截圖)和VM內存

在內存監視器中,您只能看到堆(因此分配給正在運行應用程序的VM的內存),而不是實際的RAM。此最大堆大小受系統限制(例如,請參閱https://stackoverflow.com/a/9940415/1096567)。

Libgdx通過JNI使用OpenGL,因此也直接使用RAM。

探討一般你需要其他工具比內存監控你的內存使用情況,參見例如: How do I discover memory usage of my application in Android?

我不知道你的應用程序,但1.2GB似乎有點高。如果您沒有使用Texture Atlases & the Texture Packer,那可能是開始優化的好地方。另外一定要處置所有Disposables(如BitmapFont)。 Here is a detailed list.

+0

感謝您澄清本機內存和VM內存之間的差異!這確實令我困惑。我已經在使用紋理圖集,而且我的遊戲在圖形上並不豐富。根據我使用的Texture Packer,我有5個紋理圖集,總共需要12MB的RAM(全部5個)。我要檢查的是我是否要多次創建一些相同的紋理貼圖。還有什麼我應該檢查? – asherbar

+0

@ user2016436我不是libgdx-pro,但您應該檢查是否放置了所有一次性使用:https://github.com/libgdx/libgdx/wiki/Memory-management。我也不太瞭解你的應用程序,瞭解你的記憶熱點。你需要自己分析它。 – Lovis