标签:memory-management android graphhopper
当我试图分配超过约.对于我的graphhopper项目,Android 2.3(三星Galaxy 1)上的30MB我遇到了OutOfMemory错误.但我认识到,对于像Firefox和skobbler这样的应用程序,在同一台设备上,分配超过80MB是可能的!至少我看到任务管理器中使用了90甚至120MB的内存!
我发现较新的Android版本> = 3允许设置大堆标志(largeHeap = true),但Firefox如何为Android 2.3做这个?
解决方法:
我认为这些应用程序可能正在使用可能超出限制的本机内存(它们从本机代码请求内存).
即使没有本机代码,也可以通过使用ByteBuffer并调用allocateDirect来实现.这可以使用this hack进行验证.
更新可悲地,这只能通过this post的本机代码实现.他们已经将其包装在java utility call中.但是对于评论者’Delyan’建议以下仅用于Java的图像处理黑客攻击:
BitmapFactory.Options opts = new BitmapFactory.Options();
Field field = opts.getClass().getField("inNativeAlloc");
field.setBoolean(opts, true);
但是:“那就是说,请记住,这很危险.如果设备内存不足,那么oomkiller会先跟踪你.没有警告,没有任何警告,只有SIGKILL.所以,比以往任何时候都更好地回收你所做的一切需要而且非常非常小心!“
更新2最终我们可以通过反射来破解访问sun.misc.Unsafe,就像流行的Java-Chronicle project一样?
标签:memory-management,android,graphhopper 来源: https://codeday.me/bug/20190703/1371531.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。