Bry*_*ris 10 java android memory-management android-ndk
因此,Android面临的挑战之一是各种设备规格(特别是设备内存).
我已经编写了我的模型对象以SoftReferences
懒惰加载的方式广泛使用Java ,因此VM可以自由地修剪当前未使用的数据模型部分,因为它认为合适,并且它们只是根据需要重新构建.
然而,在实践中的一个挑战SoftReferences
是,它们倾向于在几秒内被清除而变得弱引用而不是在VM内存不足之前徘徊,因此它们在允许模型修剪方面工作良好,但它们不要工作,因为它通常意味着没有任何记忆.理想情况下,在具有足够内存的设备上,您可以让用户将对象保留在内存中.
因此,SoftReferences
与LRU机制结合是很常见的,其中LRU保持指向最近引用的对象的硬指针.这当然不是理想的,因为它假定你有足够的内存用于所有这些几乎没有引用的对象.
知道什么是LRU的良好默认值也是一个挑战.
在一个完美的世界中,Android会使用它的低内存回调作为提示(因此我可以从一个小型LRU开始,并定期将其提升到低内存回调开始发生然后将其关闭以找到设备的良好值) ,但根据我的经验,这个回调似乎永远不会与实际的VM内存压力一致.
有没有人遇到过合理的方法来检测您的数据模型是否在特定设备上使用了太多内存?
小智 0
这行得通吗?
MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
642 次 |
最近记录: |