我有一個OpenGL Android應用程序,它使用大量內存來設置一個複雜的場景,這顯然會導致大量的堆碎片。即使沒有內存泄漏,也不可能銷燬和創建應用程序,而不會由於碎片導致內存不足。 (碎片肯定是問題,而不是泄漏)Android堆分段策略?
這將導致一個重大的問題,因爲Android有破壞和創造在同一VM /堆這顯然會導致活動崩潰活動的習慣。至於對付這個戰略我已經使用了以下技術:
@Override
protected void onStop() {
super.onStop();
if(isFinishing()) {
System.runFinalizersOnExit(true);
System.exit(0);
}
}
這保證了當活動結束它會導致一個完整的虛擬機關閉,因此下一次活動開始它得到一個新的不分段堆。
注:我意識到這不是「Android方式」,但考慮到垃圾收集器是非壓縮的,不可能連續重用堆。
這個技巧實際上一般工作,但是當它在一個非完成模式下被破壞然後重新創建時它不起作用。
有沒有人有關於如何處理堆的降解什麼好的建議?
此外應注意:減少內存消耗是不是真的任何一個選項。這個活動實際上並沒有使用那麼多的內存,但堆(和本機堆)似乎很容易被分割,可能是由於一些大的內存塊
我有同樣的問題,並採用了類似的解決方案。真可怕。 – 2015-10-14 23:02:59