android debug的时候遇到的问题,该模式下无法自动垃圾回收无用对象吗

云伊漫天 2014-10-27 11:52:12
我在测试:在android 应用中循环多次读取大文件。android应用程序在没有debug的时候:我发现能够自动垃圾回收,可以完成循环。而通过debug模式:应用竟然没有释放无用的垃圾对象,内存不断增加,循环了几次就报错:(app bug):globle reference table overflow(max 51200)。


麻烦哪位高手指导下,能否在debug模式下,也能垃圾回收,释放内存。
...全文
359 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
云伊漫天 2014-11-03
  • 打赏
  • 举报
回复
引用 5 楼 svenwang 的回复:
[quote=引用 4 楼 u014032607 的回复:] [quote=引用 3 楼 svenwang 的回复:] [quote=引用 2 楼 u014032607 的回复:] [quote=引用 1 楼 svenwang 的回复:] 这个是JNI代码的报错。 可能是因为你没有关闭doc? 垃圾回收只是内存的回收,但是并不能解决资源泄漏的问题。
我是没有关闭document,怎么去关闭它呢,一般这个jni的报错是什么问题导致的呢?对比debug和普通run情况下,为什么会有差异呢?谢谢你了 [/quote] 1.怎么关闭?有API文档说明你去看看,一般是close方法。 2.这个jni的报错是在xml解析模块里产生的,原因估计是你打开太多文件超出它允许的数量上限。 3.debug和run当然有区别,执行代码的模式都不一样。debug和run运行效果不同一般是因为多线程时序或者执行速度差异导致,但是也要具体问题具体分析。对于你的情况,我不了解你所用的xml模块的JNI实现代码,所以不好下结论。也有可能在代码实现里针对DEBUG模式,文件上限数量更小。[/quote] 我开发的app需要加载大量的文件,然后内存就一直吃紧,不断地gc,我能不能修改android gc的策略呢,能不能不用从应用层修改,而直接对dalvikvm进行设置呢,[/quote] 最高不要同时加载大量文件,而是加载用完一批文件就关闭然后在加载另外一批文件。这个gc策略没有关系,你如果确实用到了那么多内存,gc也不可能把你正在使用的内存回收掉。[/quote] 可是开发的软件必须要在内存里保存那么大的数据量,这些数据在之后会频繁调用的,我现在遇到的问题就是由于我内存分配的heap很大了,每次gc的时间都很长,再加上gc很频繁,这样严重的影响了运行的效率,我能否去设置dalvikvm中的参数去减少gc的频率呢,网上说有dalvikvm.vm.heapminfree参数,可是我在应用中无法去修改,能否应用本身就去修改dalvikvm的参数
云伊漫天 2014-11-02
  • 打赏
  • 举报
回复
引用 3 楼 svenwang 的回复:
[quote=引用 2 楼 u014032607 的回复:] [quote=引用 1 楼 svenwang 的回复:] 这个是JNI代码的报错。 可能是因为你没有关闭doc? 垃圾回收只是内存的回收,但是并不能解决资源泄漏的问题。
我是没有关闭document,怎么去关闭它呢,一般这个jni的报错是什么问题导致的呢?对比debug和普通run情况下,为什么会有差异呢?谢谢你了 [/quote] 1.怎么关闭?有API文档说明你去看看,一般是close方法。 2.这个jni的报错是在xml解析模块里产生的,原因估计是你打开太多文件超出它允许的数量上限。 3.debug和run当然有区别,执行代码的模式都不一样。debug和run运行效果不同一般是因为多线程时序或者执行速度差异导致,但是也要具体问题具体分析。对于你的情况,我不了解你所用的xml模块的JNI实现代码,所以不好下结论。也有可能在代码实现里针对DEBUG模式,文件上限数量更小。[/quote] 我开发的app需要加载大量的文件,然后内存就一直吃紧,不断地gc,我能不能修改android gc的策略呢,能不能不用从应用层修改,而直接对dalvikvm进行设置呢,
svenwang 2014-11-02
  • 打赏
  • 举报
回复
引用 4 楼 u014032607 的回复:
[quote=引用 3 楼 svenwang 的回复:] [quote=引用 2 楼 u014032607 的回复:] [quote=引用 1 楼 svenwang 的回复:] 这个是JNI代码的报错。 可能是因为你没有关闭doc? 垃圾回收只是内存的回收,但是并不能解决资源泄漏的问题。
我是没有关闭document,怎么去关闭它呢,一般这个jni的报错是什么问题导致的呢?对比debug和普通run情况下,为什么会有差异呢?谢谢你了 [/quote] 1.怎么关闭?有API文档说明你去看看,一般是close方法。 2.这个jni的报错是在xml解析模块里产生的,原因估计是你打开太多文件超出它允许的数量上限。 3.debug和run当然有区别,执行代码的模式都不一样。debug和run运行效果不同一般是因为多线程时序或者执行速度差异导致,但是也要具体问题具体分析。对于你的情况,我不了解你所用的xml模块的JNI实现代码,所以不好下结论。也有可能在代码实现里针对DEBUG模式,文件上限数量更小。[/quote] 我开发的app需要加载大量的文件,然后内存就一直吃紧,不断地gc,我能不能修改android gc的策略呢,能不能不用从应用层修改,而直接对dalvikvm进行设置呢,[/quote] 最高不要同时加载大量文件,而是加载用完一批文件就关闭然后在加载另外一批文件。这个gc策略没有关系,你如果确实用到了那么多内存,gc也不可能把你正在使用的内存回收掉。
svenwang 2014-10-27
  • 打赏
  • 举报
回复
这个是JNI代码的报错。 可能是因为你没有关闭doc? 垃圾回收只是内存的回收,但是并不能解决资源泄漏的问题。
svenwang 2014-10-27
  • 打赏
  • 举报
回复
引用 2 楼 u014032607 的回复:
[quote=引用 1 楼 svenwang 的回复:] 这个是JNI代码的报错。 可能是因为你没有关闭doc? 垃圾回收只是内存的回收,但是并不能解决资源泄漏的问题。
我是没有关闭document,怎么去关闭它呢,一般这个jni的报错是什么问题导致的呢?对比debug和普通run情况下,为什么会有差异呢?谢谢你了 [/quote] 1.怎么关闭?有API文档说明你去看看,一般是close方法。 2.这个jni的报错是在xml解析模块里产生的,原因估计是你打开太多文件超出它允许的数量上限。 3.debug和run当然有区别,执行代码的模式都不一样。debug和run运行效果不同一般是因为多线程时序或者执行速度差异导致,但是也要具体问题具体分析。对于你的情况,我不了解你所用的xml模块的JNI实现代码,所以不好下结论。也有可能在代码实现里针对DEBUG模式,文件上限数量更小。
云伊漫天 2014-10-27
  • 打赏
  • 举报
回复
引用 1 楼 svenwang 的回复:
这个是JNI代码的报错。 可能是因为你没有关闭doc? 垃圾回收只是内存的回收,但是并不能解决资源泄漏的问题。
我是没有关闭document,怎么去关闭它呢,一般这个jni的报错是什么问题导致的呢?对比debug和普通run情况下,为什么会有差异呢?谢谢你了

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧