今天热门
热点:

android内存管理,垃圾回收策略的疑惑,android垃圾回收


android 内存管理 gc dalvikvm参数 本人开发的应用需要加载大量的数据到内存,加载的过程中系统频繁的调用gc进行垃圾回收,由于使用的heap比较大,每次gc的耗时都比较长,我如何能修改降低gc的频率,从而优化我的运行速度呢。有人说通过对dalvikvm的参数进行设置,dalvik.vm.heapminfree,dalvik.vm.heapmaxfree这些参数又代表了什么,该如何在应用中去修改这些参数呢?系统版本4.0以上。
谢谢高手指导!

解决方案

我之前处理过heap的bug,对配置的Prop研究过,看下http://blog.csdn.net/ykdsea/article/details/38519511
但是你是写一个app是没有办法修改这写prop的,如果你的数据特别零碎,最好自己做内存管理。

引用
Quote: 引用

我之前处理过heap的bug,对配置的Prop研究过,看下http://blog.csdn.net/ykdsea/article/details/38519511
但是你是写一个app是没有办法修改这写prop的,如果你的数据特别零碎,最好自己做内存管理。


比较纳闷的是android中有个隐藏的vmRuntime,通过反射可以设置内存的利用率,却不能设置heapminfree等。那内存管理怎么做的呢,这个我不太懂呢

Runtime应该用处不大了,因为不少prop是启动的时候就已经使用了,重新设置已经没有用了。而且对于你的case来说,是内存占用比较大,修改这些prop并不能改变这个事实的。
我是建议把对象放到native去管理。

引用
Quote: 引用

Quote: 引用

Quote: 引用

我之前处理过heap的bug,对配置的Prop研究过,看下http://blog.csdn.net/ykdsea/article/details/38519511
但是你是写一个app是没有办法修改这写prop的,如果你的数据特别零碎,最好自己做内存管理。


比较纳闷的是android中有个隐藏的vmRuntime,通过反射可以设置内存的利用率,却不能设置heapminfree等。那内存管理怎么做的呢,这个我不太懂呢

Runtime应该用处不大了,因为不少prop是启动的时候就已经使用了,重新设置已经没有用了。而且对于你的case来说,是内存占用比较大,修改这些prop并不能改变这个事实的。
我是建议把对象放到native去管理。


恩恩,是很大的内存,能达到一百多兆,放到native如何管理,能给个方向吗?这一块没有接触过,就没有办法在应用层设置gc策略的吗?减少gc次数,我看有个systemproperties应该存储了系统prop中的参数,android每个应用都会开启一个dalvik,按理来说应用本身可以对dalvik进行特殊的设置的呀,真的谢谢你了

dalvik vm是每个进程都有一个,但是你要看看这些参数都有什么意义。gc的速度影响有两个方面,一个是object的数量,另外一个heap的大小。
object的数量,这个是你app绝对的,这些参数不会有影响。
对于heap当前的大小,这几个prop有一定的影响,但是对于你memory消耗本来就很高的情况下,我觉得差距不会大的。

放到native管理,就是说你这些对象要用malloc来申请,提供接口让java层可以操作这些对象。如果都是小对象,那么可以用pool来管理,防止碎片化。

第一:增加申请内存大小: android:largeHeap="true"
第二:分散内存, 将你的应用分散在多个进程里面。 

dalvik.vm.heapminfree,dalvik.vm.heapmaxfree这些属性属于静态系统属性,运行时修改是没有用的。

引用
Quote: 引用

Quote: 引用

Quote: 引用

第一:增加申请内存大小: android:largeHeap="true"
第二:分散内存, 将你的应用分散在多个进程里面。 

dalvik.vm.heapminfree,dalvik.vm.heapmaxfree这些属性属于静态系统属性,运行时修改是没有用的。


引用
第一:增加申请内存大小: android:largeHeap="true"
第二:分散内存, 将你的应用分散在多个进程里面。 

dalvik.vm.heapminfree,dalvik.vm.heapmaxfree这些属性属于静态系统属性,运行时修改是没有用的。


增加申请内存我知道,可是这个分散内存具体怎么进行啊,也没有找到相关可实施的具体做法,还希望你解惑,谢谢你



因为内存是以进程为分配单位的, 每个进程的可分配内存是独立计算的, 所以分散内存的意思就是分散到不同进程中。
在Androidmanifest里面,如果比较独立的模块,配置android:process属性。 


那是不是两个进程之间就不能相互的访问数据了呢,彼此都独立了,


是的, 不过还是可以通过service,provider等方式来相互访问。

不懂,绑定!!!!!!

这帖子不错,推荐了

www.zrccd.nettrue/topics/20180204/188793.htmlTechArticleandroid内存管理,垃圾回收策略的疑惑,android垃圾回收 android 内存管理 gc dalvikvm参数 本人开发的应用需要加载大量的数据到内存,加载的过程中系统频繁的调用gc进行垃圾回收,由于使...

相关文章

    暂无相关文章

用户评论

大家都在看