精华内容
下载资源
问答
  • dalvik.vm.heapsize=32m ,此步骤为修改虚拟机大小为 32m 上面的第二点注意,这是修改 虚拟机内存,不是修改虚拟内存!! 这 2 者完全不同! 最近论坛里关于修改 安卓 系统 2 个参数的帖子很火,说修改后可以提升...

    智能手机硬件加速及虚拟内存利弊分析
    1. debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速
    2. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m
    上面的第二点注意,这是修改 虚拟机内存,不是修改虚拟内存!! 这2者完全不同!

    最近论坛里关于修改安卓系统2个参数的帖子很火,说修改后可以提升手机的性能。修改后有说好用的,也有说不好用的,好用的把楼主捧为了神,不好用的把楼主骂个半死,其实科学嘛,总有好处有坏处的,我们只要好好分析,就能得知我们为什么要改,还有修改后可以得到什么样的益处。捧别人为神或者踩别人为泥都对事情发展没有好处。

    关于修改的内容,主要是修改2个参数:

    debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速
    dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m


    我来跟你解释这2个参数有什么作用,并且说说为什么我做ROM的时候不修改这2个参数。

    1. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m

    安卓系统 实际上,就是建立在 linux内核上的一个JAVA系统, 了解JAVA的同学应该知道, 在运行JAVA程序的时候,需要在每个程序上建立一个虚拟机, 以获得内存的分配,优点是假设某个程序崩溃了,系统只要关闭那个虚拟机就可以了,不会影响其他程序,缺点是很耗内存,因为你每开一个程序,就要新开一个虚拟机。
    举个例子,打开程序A 的时候,程序A 就自动向系统申请1份虚拟机内存, 然后不关闭,再开一个程序B ,程序B要求向系统申请 3份内存, 假设虚拟机内存设置为24M ,那么这2个程序合共占用了内存 1X24 + 3X24 = 96M 。 假设虚拟机内存设置为 32M ,则这2个程序合共占用了内存 1X32 + 3X32 =128M

    那么,究竟修改好,还是不修改好呢?
    假设你的机子里,平常只运行一些小程序,例如QQ、看书软件、小游戏等,那么建议你不要修改,就使用标准的24M,因为足够用,并且防止运行程序过多,而产生崩溃。那是不是越小越好呢?当然不是,因为分配给程序的内存过小,有可能因为软件申请不到足够的内存,而运行不流畅。

    假设平常经常运行大型程序,例如大型3D游戏等,则可以稍微调大一些,以使大型程序得到足够的内存来运行,可以更流畅。 那是不是越大越好呢,当然不是,因为调的太大,其他程序就分配不到内存,无法运行了。

    google 为什么要把系统的虚拟机设置为24M 呢? 由于有些软件吃内存,也有一些小软件不吃内存,我觉得这是属于一个中庸的设计,由于没法全部偏向大型,也没法全部偏向小型,那就中庸吧。


    我们都知道,华为C8650的机身内存 RAM 是256M ,这是固定的,给一个虚拟机用24M 还是 32M ,自己决定吧,不过,对于某些程序控,在手机里装一大堆需要开启服务的软件的筒子们,建议还是别改了,否则开机的时候需要启动一大堆程序,最后弄得机子都开不了。

    我们来和常用的windows系统对比一下,假设同样有256M内存

    windows系统的内存机制是:来了一个程序,程序告诉系统,我要100M ,然后来了第二个程序,第二个程序说,我要150M, 这个时候,内存已经被使用100M + 150M = 250M,剩余6M 。
    然后来了第三个程序,第三个程序说,我要50M, 由于不够分给他,系统就崩溃了。

    安卓系统的内存机制是: 来了一个程序,程序告诉系统,我要100M ,然后来了第二个程序,第二个程序说,我要150M, 这个时候,内存已经被使用100M + 150M = 250M,剩余6M 。
    然后来了第三个程序,第三个程序说,我要50M, 这个时候系统自动关闭最先申请内存程序的虚拟机,或者最次要程序的虚拟机,他把第一个程序关闭了,系统获得了100M的内存,加上剩余的6M,合共106M,分配给第三个程序50M,系统继续运行。

    第一个是 三个和尚,最后大家都没水吃
    第二个是 牺牲小我,完成大我。

    当然,系统在实际运用中,比上面复杂多了,例如安卓还加入了“隐藏机制”,只要不运行的程序,都自动马上释放内存,windows系统出现3个程序抢内存的情况,也加入了“等待机制”等,有兴趣的话可以自己研究。 
    转载一段 隔壁的论坛的文章: 《安卓的原理...不用在意内存的大小》 (以下全部都是转载)

    不用在意剩余内存的大小。 
    其实很多人都是把使用其他系统的习惯带过来来了。android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。
    到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上有个更改内存阀值的程序可以有一定改善。
    但改动也可能带来一些问题,取决于值的设定。
    那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说android后台的原理,你就明白了。android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢? 还有一个。为什么android一个应用看起来那么耗内存。大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。 

    以上这些设计确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。大家不妨按我说的习惯来用用这个系统。最后推荐一款进程管理软件,systempanel,market上能搜到,界面友好启动快,功能也不错,用于手动关闭进程很好的软件。
    祝大家玩机愉快,这系统开十天半个月都没问题,不是windows。
    以上内容均为转帖过来,至于为什么开了大程序或者开了好几个程序之后切换会变慢,我的理解如下

    1.大程序A已经开启,占用70%内存,如果再想运行一个B,需要50%的内存,则就需要一个将A从内存中释放或者压缩的过程,所以表现出来的就是慢一会儿
    2.A\B\C\D\E共占用内存80%,运行新程序Z需要20%的内存,系统内存因为没见过剩余0的时候,也就是应该剩一部分空闲内存,那么就需要从A~E这几个程序中选择一个或者几个来关闭,这一过程也需要耗费系统资源,所以会慢一会儿
    3.也就是说你手动去杀程序的时候,就是替系统在释放内存,就算你不杀,在需要内存的时候系统也会自动释放。
    4.不在后台运行的程序(没服务的),即使不杀也不会耗电。在后台运行的(有服务的)程序,如后台放歌,当然会耗电。
    5.不是说杀进程没用,不然作者就不会推荐进程管理软件了。哪个带服务耗电哪个后台一直在运行,看服务就能看出来,这样的该杀。
    6,以qq举例,正常的退,会在进程管理里留下qq的运行状态,但不耗电不占cpu,如果你只是切换出去(按小房子而不是退出)那么自然会耗电,因为程序还在运行。

    转载于:https://my.oschina.net/kangchunhui/blog/139391

    展开全文
  • 关于dalvik.vm.heapsize

    千次阅读 2012-11-27 14:03:22
    关于dalvik.vm.heapsize 文档原地址:http://wenku.baidu.com/view/8d77f9c6d5bbfd0a795673b3.html 智能手机硬件加速及虚拟内存利弊分析 1. debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速...
    关于dalvik.vm.heapsize
    


    文档原地址:http://wenku.baidu.com/view/8d77f9c6d5bbfd0a795673b3.html


    智能手机硬件加速及虚拟内存利弊分析
    1. debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速
    2. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m
    上面的第二点注意,这是修改 虚拟机内存,不是修改虚拟内存!! 这2者完全不同!

    最近论坛里关于修改安卓系统2个参数的帖子很火,说修改后可以提升手机的性能。修改后有说好用的,也有说不好用的,好用的把楼主捧为了神,不好用的把楼主骂个半死,其实科学嘛,总有好处有坏处的,我们只要好好分析,就能得知我们为什么要改,还有修改后可以得到什么样的益处。捧别人为神或者踩别人为泥都对事情发展没有好处。

    关于修改的内容,主要是修改2个参数:

    debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速
    dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m


    我来跟你解释这2个参数有什么作用,并且说说为什么我做ROM的时候不修改这2个参数。

    1. dalvik.vm.heapsize=24m,修改为dalvik.vm.heapsize=32m,此步骤为修改虚拟机大小为32m

    安卓系统 实际上,就是建立在 linux内核上的一个JAVA系统, 了解JAVA的同学应该知道, 在运行JAVA程序的时候,需要在每个程序上建立一个虚拟机, 以获得内存的分配,优点是假设某个程序崩溃了,系统只要关闭那个虚拟机就可以了,不会影响其他程序,缺点是很耗内存,因为你每开一个程序,就要新开一个虚拟机。
    举个例子,打开程序A 的时候,程序A 就自动向系统申请1份虚拟机内存, 然后不关闭,再开一个程序B ,程序B要求向系统申请 3份内存, 假设虚拟机内存设置为24M ,那么这2个程序合共占用了内存 1X24 + 3X24 = 96M 。 假设虚拟机内存设置为 32M ,则这2个程序合共占用了内存 1X32 + 3X32 =128M

    那么,究竟修改好,还是不修改好呢?
    假设你的机子里,平常只运行一些小程序,例如QQ、看书软件、小游戏等,那么建议你不要修改,就使用标准的24M,因为足够用,并且防止运行程序过多,而产生崩溃。那是不是越小越好呢?当然不是,因为分配给程序的内存过小,有可能因为软件申请不到足够的内存,而运行不流畅。

    假设平常经常运行大型程序,例如大型3D游戏等,则可以稍微调大一些,以使大型程序得到足够的内存来运行,可以更流畅。 那是不是越大越好呢,当然不是,因为调的太大,其他程序就分配不到内存,无法运行了。

    google 为什么要把系统的虚拟机设置为24M 呢? 由于有些软件吃内存,也有一些小软件不吃内存,我觉得这是属于一个中庸的设计,由于没法全部偏向大型,也没法全部偏向小型,那就中庸吧。


    我们都知道,华为C8650的机身内存 RAM 是256M ,这是固定的,给一个虚拟机用24M 还是 32M ,自己决定吧,不过,对于某些程序控,在手机里装一大堆需要开启服务的软件的筒子们,建议还是别改了,否则开机的时候需要启动一大堆程序,最后弄得机子都开不了。

    我们来和常用的windows系统对比一下,假设同样有256M内存

    windows系统的内存机制是:来了一个程序,程序告诉系统,我要100M ,然后来了第二个程序,第二个程序说,我要150M, 这个时候,内存已经被使用100M + 150M = 250M,剩余6M 。
    然后来了第三个程序,第三个程序说,我要50M, 由于不够分给他,系统就崩溃了。

    安卓系统的内存机制是: 来了一个程序,程序告诉系统,我要100M ,然后来了第二个程序,第二个程序说,我要150M, 这个时候,内存已经被使用100M + 150M = 250M,剩余6M 。
    然后来了第三个程序,第三个程序说,我要50M, 这个时候系统自动关闭最先申请内存程序的虚拟机,或者最次要程序的虚拟机,他把第一个程序关闭了,系统获得了100M的内存,加上剩余的6M,合共106M,分配给第三个程序50M,系统继续运行。

    第一个是 三个和尚,最后大家都没水吃
    第二个是 牺牲小我,完成大我。

    当然,系统在实际运用中,比上面复杂多了,例如安卓还加入了“隐藏机制”,只要不运行的程序,都自动马上释放内存, windows系统出现3个程序抢内存的情况,也加入了“等待机制”等,有兴趣的话可以自己研究。
    转载一段 隔壁的论坛的文章: 《安卓的原理...不用在意内存的大小》 (以下全部都是转载)

    不用在意剩余内存的大小。
    其实很多人都是把使用其他系统的习惯带过来来了。android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。
    到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上有个更改内存阀值的程序可以有一定改善。
    但改动也可能带来一些问题,取决于值的设定。
    那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说android后台的原理,你就明白了。android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢? 还有一个。为什么android一个应用看起来那么耗内存。大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。
    以上这些设计确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。大家不妨按我说的习惯来用用这个系统。最后推荐一款进程管理软件,systempanel,market上能搜到,界面友好启动快,功能也不错,用于手动关闭进程很好的软件。
    祝大家玩机愉快,这系统开十天半个月都没问题,不是windows。
    以上内容均为转帖过来,至于为什么开了大程序或者开了好几个程序之后切换会变慢,我的理解如下
    1.大程序A已经开启,占用70%内存,如果再想运行一个B,需要50%的内存,则就需要一个将A从内存中释放或者压缩的过程,所以表现出来的就是慢一会儿
    2.A\B\C\D\E共占用内存80%,运行新程序Z需要20%的内存,系统内存因为没见过剩余0的时候,也就是应该剩一部分空闲内存,那么就需要从A~E这几个程序中选择一个或者几个来关闭,这一过程也需要耗费系统资源,所以会慢一会儿
    3.也就是说你手动去杀程序的时候,就是替系统在释放内存,就算你不杀,在需要内存的时候系统也会自动释放。
    4.不在后台运行的程序(没服务的),即使不杀也不会耗电。在后台运行的(有服务的)程序,如后台放歌,当然会耗电。
    5.不是说杀进程没用,不然作者就不会推荐进程管理软件了。哪个带服务耗电哪个后台一直在运行,看服务就能看出来,这样的该杀。
    6,以qq举例,正常的退,会在进程管理里留下qq的运行状态,但不耗电不占cpu,如果你只是切换出去(按小房子而不是退出)那么自然会耗电,因为程序还在运行。


    第二个参数: debug.sf.hw=0,修改为debug.sf.hw=1,此步骤为打开硬件加速

    首先,我要说明,这个世界上没有免费的午餐,假设通过那么简单的设置就可以提升性能,那厂商为什么不做呢?由此可知这个玩意实在效用有限,或者是需要和其他工具配合使用!

    这个设置的作用到现在为止还没有一个标准的说法来说明这是用来干嘛的, 开启硬件加速? 开启什么硬件加速?

    难道是3D性能? 难道不开启就没有3D性能吗?
    开启CPU某些特殊性能? 这个也不靠谱啊!获取CPU性能关键看指令集!而且,为什么不一开始就使用呢?
    开启其他硬件性能? 改了难道音箱变大声了? 改了难道30W像素的摄像头可以照500W了?改了难道内存由256M变成512M 了?
    要么就是让CPU 一直保持100%性能的状态?那样性能是提升了,但是电池效果却下降了! (觉得这个解释还稍微靠谱一些)


    我个人认为,这个设置的作用,目的是开启或者结束硬件厂商的优化指令,因为每个厂商对硬件的设置不一样,肯定在某些位置设置了一个优化指令,并且通过这个设置来开启。

    例如,google 的工程设计标准里,设计了某个版本的手机设置标准是256M内存,并且告诉所有手机生产厂商:如果你是按照我的标准来制作,那么 debug.sf.hw= 就设置为0, 如果你要自己更改部分硬件设置,那么就设置为1 ,但是设置为 1 后,你得指向一个文件,告诉系统究竟修改了一些什么了。 某手机厂商为了手机速度更快,增加内存到512M,并且设置了一个文件,告诉系统,这个手机是用512M内存的,不是256M。

    然后某个人开始使用带有优化指令的手机, 过了一段时间,又换了新手机后,发现配置接近,但是性能却不一样, 于是对比原来手机的文件,发现了这个指令,于是进行修改了,并且很有兴致的告诉别人,但是实际上,他用的新手机并没有设置优化指令啊,开启了以后等于没开启,甚至由于系统找不到优化指令,但是设置又告诉他有优化指令,弄得系统也不知所措,运行更慢,或者出现问题........

    但是,由于这个人的“新发现”,弄得这个简单的 0和1 成为了一代传说(或者是一代流言)

    特别声明: 红字部分仅为个人猜测。

    由于手头资料有限,可能本人有错漏,欢迎指正。

    有人说,现在所有的自制ROM都改了这2个参数了,其实,至少我的ROM从来都不改的,有兴趣可以用我的ROM研究一下。
    展开全文
  • 关于 ...dalvik.vm.heapsize 文档原地址:http://wenku.baidu.com/view/8d77f9c6d5bbfd0a795673b3.html 智能手机硬件加速及虚拟内存利弊分析 1. debug.sf.hw=0,修改为debug.sf.hw=1

    http://bbs.meizu.com/viewthread.php?tid=3529493

    关于
    dalvik.vm.heapsize


    文档原地址: http://wenku.baidu.com/view/8d77f9c6d5bbfd0a795673b3.html



    智能手机硬件加速及虚拟内存利弊分析
    1. debug.sf.hw=0 ,修改为 debug.sf.hw=1 ,此步骤为打开硬件加速
    2. dalvik.vm.heapsize=24m ,修改为 dalvik.vm.heapsize=32m ,此步骤为修改虚拟机大小为 32m
    上面的第二点注意,这是修改 虚拟机内存,不是修改虚拟内存!! 这 2 者完全不同!

    最近论坛里关于修改安卓系统 2 个参数的帖子很火,说修改后可以提升手机的性能。修改后有说好用的,也有说不好用的,好用的把楼主捧为了神,不好用的把楼主骂个半死,其实科学嘛,总有好处有坏处的,我们只要好好分析,就能得知我们为什么要改,还有修改后可以得到什么样的益处。捧别人为神或者踩别人为泥都对事情发展没有好处。

    关于修改的内容,主要是修改 2 个参数:

    debug.sf.hw=0 ,修改为 debug.sf.hw=1 ,此步骤为打开硬件加速
    dalvik.vm.heapsize=24m ,修改为 dalvik.vm.heapsize=32m ,此步骤为修改虚拟机大小为 32m


    我来跟你解释这 2 个参数有什么作用,并且说说为什么我做 ROM 的时候不修改这 2 个参数。

    1. dalvik.vm.heapsize=24m ,修改为 dalvik.vm.heapsize=32m ,此步骤为修改虚拟机大小为 32m

    安卓系统 实际上,就是建立在 linux 内核上的一个 JAVA 系统, 了解 JAVA 的同学应该知道, 在运行 JAVA 程序的时候,需要在每个程序上建立一个虚拟机, 以获得内存的分配,优点是假设某个程序崩溃了,系统只要关闭那个虚拟机就可以了,不会影响其他程序,缺点是很耗内存,因为你每开一个程序,就要新开一个虚拟机。
    举个例子,打开程序 A 的时候,程序 A 就自动向系统申请 1 份虚拟机内存, 然后不关闭,再开一个程序 B ,程序 B 要求向系统申请 3 份内存, 假设虚拟机内存设置为 24M ,那么这 2 个程序合共占用了内存 1X24 + 3X24 = 96M 。 假设虚拟机内存设置为 32M ,则这 2 个程序合共占用了内存 1X32 + 3X32 =128M

    那么,究竟修改好,还是不修改好呢?
    假设你的机子里,平常只运行一些小程序,例如 QQ 、看书软件、小游戏等,那么建议你不要修改,就使用标准的 24M ,因为足够用,并且防止运行程序过多,而产生崩溃。那是不是越小越好呢?当然不是,因为分配给程序的内存过小,有可能因为软件申请不到足够的内存,而运行不流畅。

    假设平常经常运行大型程序,例如大型 3D 游戏等,则可以稍微调大一些,以使大型程序得到足够的内存来运行,可以更流畅。 那是不是越大越好呢,当然不是,因为调的太大,其他程序就分配不到内存,无法运行了。

    google 为什么要把系统的虚拟机设置为 24M 呢? 由于有些软件吃内存,也有一些小软件不吃内存,我觉得这是属于一个中庸的设计,由于没法全部偏向大型,也没法全部偏向小型,那就中庸吧。


    我们都知道,华为 C8650 的机身内存 RAM 256M ,这是固定的,给一个虚拟机用 24M 还是 32M ,自己决定吧,不过,对于某些程序控,在手机里装一大堆需要开启服务的软件的筒子们,建议还是别改了,否则开机的时候需要启动一大堆程序,最后弄得机子都开不了。

    我们来和常用的 windows 系统对比一下,假设同样有 256M 内存

    windows 系统的内存机制是:来了一个程序,程序告诉系统,我要 100M ,然后来了第二个程序,第二个程序说,我要 150M , 这个时候,内存已经被使用 100M + 150M = 250M ,剩余 6M
    然后来了第三个程序,第三个程序说,我要 50M , 由于不够分给他,系统就崩溃了。

    安卓系统的内存机制是: 来了一个程序,程序告诉系统,我要 100M ,然后来了第二个程序,第二个程序说,我要 150M , 这个时候,内存已经被使用 100M + 150M = 250M ,剩余 6M
    然后来了第三个程序,第三个程序说,我要 50M , 这个时候系统自动关闭最先申请内存程序的虚拟机,或者最次要程序的虚拟机,他把第一个程序关闭了,系统获得了 100M 的内存,加上剩余的 6M ,合共 106M ,分配给第三个程序 50M ,系统继续运行。

    第一个是 三个和尚,最后大家都没水吃
    第二个是 牺牲小我,完成大我。

    当然,系统在实际运用中,比上面复杂多了,例如安卓还加入了 隐藏机制 ,只要不运行的程序,都自动马上释放内存, windows 系统出现 3 个程序抢内存的情况,也加入了 等待机制 等,有兴趣的话可以自己研究。
    转载一段 隔壁的论坛的文章: 《安卓的原理 ... 不用在意内存的大小》 (以下全部都是转载)

    不用在意剩余内存的大小。
    其实很多人都是把使用其他系统的习惯带过来来了。 android 大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道 java ,就能更清楚这机制了。其实和 java 的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是 android 标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。
    到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上有个更改内存阀值的程序可以有一定改善。
    但改动也可能带来一些问题,取决于值的设定。
    那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说 android 后台的原理,你就明白了。 android 的应用在被切换到后台时,它其实已经被暂停了,并不会消耗 cpu 资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是 service 。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个 android 的优点呢? 还有一个。为什么 android 一个应用看起来那么耗内存。大家知道, android 上的应用是 java ,当然需要虚拟机,而 android 上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。
    以上这些设计确保了 android 的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被 windows 毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。大家不妨按我说的习惯来用用这个系统。最后推荐一款进程管理软件, systempanel market 上能搜到,界面友好启动快,功能也不错,用于手动关闭进程很好的软件。
    祝大家玩机愉快,这系统开十天半个月都没问题,不是 windows
    以上内容均为转帖过来,至于为什么开了大程序或者开了好几个程序之后切换会变慢,我的理解如下
    1. 大程序 A 已经开启,占用 70% 内存,如果再想运行一个 B ,需要 50% 的内存,则就需要一个将 A 从内存中释放或者压缩的过程,所以表现出来的就是慢一会儿
    2.A\B\C\D\E 共占用内存 80% ,运行新程序 Z 需要 20% 的内存,系统内存因为没见过剩余 0 的时候,也就是应该剩一部分空闲内存,那么就需要从 A~E 这几个程序中选择一个或者几个来关闭,这一过程也需要耗费系统资源,所以会慢一会儿
    3. 也就是说你手动去杀程序的时候,就是替系统在释放内存,就算你不杀,在需要内存的时候系统也会自动释放。
    4. 不在后台运行的程序(没服务的),即使不杀也不会耗电。在后台运行的(有服务的)程序,如后台放歌,当然会耗电。
    5. 不是说杀进程没用,不然作者就不会推荐进程管理软件了。哪个带服务耗电哪个后台一直在运行,看服务就能看出来,这样的该杀。
    6 ,以 qq 举例,正常的退,会在进程管理里留下 qq 的运行状态,但不耗电不占 cpu ,如果你只是切换出去(按小房子而不是退出)那么自然会耗电,因为程序还在运行。



    第二个参数: debug.sf.hw=0 ,修改为 debug.sf.hw=1 ,此步骤为打开硬件加速

    首先,我要说明,这个世界上没有免费的午餐,假设通过那么简单的设置就可以提升性能,那厂商为什么不做呢?由此可知这个玩意实在效用有限,或者是需要和其他工具配合使用!

    这个设置的作用到现在为止还没有一个标准的说法来说明这是用来干嘛的, 开启硬件加速? 开启什么硬件加速?

    难道是 3D 性能? 难道不开启就没有 3D 性能吗?
    开启 CPU 某些特殊性能? 这个也不靠谱啊!获取 CPU 性能关键看指令集!而且,为什么不一开始就使用呢?
    开启其他硬件性能? 改了难道音箱变大声了? 改了难道 30W 像素的摄像头可以照 500W 了?改了难道内存由 256M 变成 512M 了?
    要么就是让 CPU 一直保持 100% 性能的状态?那样性能是提升了,但是电池效果却下降了! (觉得这个解释还稍微靠谱一些)




    我个人认为,这个设置的作用,目的是开启或者结束硬件厂商的优化指令,因为每个厂商对硬件的设置不一样,肯定在某些位置设置了一个优化指令,并且通过这个设置来开启。

    例如, google 的工程设计标准里,设计了某个版本的手机设置标准是 256M 内存,并且告诉所有手机生产厂商:如果你是按照我的标准来制作,那么 debug.sf.hw= 就设置为 0 , 如果你要自己更改部分硬件设置,那么就设置为 1 ,但是设置为 1 后,你得指向一个文件,告诉系统究竟修改了一些什么了。 某手机厂商为了手机速度更快,增加内存到 512M ,并且设置了一个文件,告诉系统,这个手机是用 512M 内存的,不是 256M

    然后某个人开始使用带有优化指令的手机, 过了一段时间,又换了新手机后,发现配置接近,但是性能却不一样, 于是对比原来手机的文件,发现了这个指令,于是进行修改了,并且很有兴致的告诉别人,但是实际上,他用的新手机并没有设置优化指令啊,开启了以后等于没开启,甚至由于系统找不到优化指令,但是设置又告诉他有优化指令,弄得系统也不知所措,运行更慢,或者出现问题 ........

    但是,由于这个人的 新发现 ,弄得这个简单的 0 1 成为了一代传说(或者是一代流言)

    特别声明: 红字部分仅为个人猜测。

    由于手头资料有限,可能本人有错漏,欢迎指正。

    有人说,现在所有的自制 ROM 都改了这 2 个参数了,其实,至少我的 ROM 从来都不改的,有兴趣可以用我的 ROM 研究一下。

     

    展开全文
  • Modify Android dalvik.vm.heapsize.

    千次阅读 2013-01-07 12:25:00
    要修改系统的 dalvik.vm.heapsize的值,可以修改 /system/build.prop。写到 /system/build.prop 裏面,然後重開機,才會有效。還要記得 chmod 644 /system/build.prop 哦,不然会没办法开机。 build.prop如下: ...

               要修改系统的 dalvik.vm.heapsize的值,可以修改 /system/build.prop。写到 /system/build.prop 裏面,然後重開機,才會有效。還要記得 chmod 644 /system/build.prop 哦,不然会没办法开机。

    build.prop如下:

    #
    # ADDITIONAL_BUILD_PROPERTIES
    #
    wifi.interface=wlan0
    keyguard.no_require_sim=true
    ro.com.android.dataroaming=true
    ro.com.android.dateformat=MM-dd-yyyy
    ro.config.ringtone=Ring_Synth_04.ogg
    ro.config.notification_sound=pixiedust.ogg
    ro.config.alarm_alert=Alarm_Classic.ogg
    ro.ril.hsxpa=1
    ro.ril.gprsclass=10
    ro.adb.qemud=1
    ro.opengles.version=131072
    ro.sf.lcd_density=213
    dalvik.vm.heapsize=192m
    persist.sys.strictmode.visual=0
    persist.sys.strictmode.disable=1
    dalvik.vm.jniopts=warnonly
    ro.pm.warmboot=1
    sys.pm.warmboot.flag=0
    ro.mtk.browser.cachePolicy=1
    mtk.browser.useCmpbPlayer=1
    mtk.browser.alwaysFullscreen=1
    mtk.browser.openLinkInSameTab=1
    hwui.render_dirty_regions=false
    dalvik.vm.lockprof.threshold=500
    net.bt.name=Android
    dalvik.vm.stack-trace-file=/data/anr/traces.txt


    展开全文
  • Modify Android dalvik vm heapsize
  • dalvik.vm.heapstartsize=8m 相当于虚拟机的 -Xms配置,该项用来设置堆内存的初始大小。 dalvik.vm.heapgrowthlimit=192m 相当于虚拟机的 -XX:HeapGrowthLimit配置,该项用来设置一个标准的...dalvik.vm.heapsize...
  • absoluteMaxSize dalvik.vm.heapsize

    千次阅读 2013-03-01 00:12:26
    d:\linux\linuxkernel\WORKING_DIRECTORY\android-omap-20111108-gingerbread\dalvik\vm\alloc\HeapSource.c GcHeap * dvmHeapSourceStartup(size_t startSize, size_t absoluteMaxSize) {  /*  * Alloc
  • dalvik.vm.heapstartsize 堆分配的初始大小,调整这个值会影响到应用的流畅性和整体ram消耗。这个值越小,系统ram消耗越慢, 但是由于初始值较小,一些较大的应用需要扩张这个堆,从而引发gc和堆调整的策略,会...
  • Dalvik虚拟机内存管理

    2013-03-05 09:06:26
    Dalvik虚拟机内存管理
  • 关于虚拟机的参数的调整 --- heapgrowthlimit/heapsize的配置1. ProtoLog如何动态打开(android R开始引入) 1. ProtoLog如何动态打开(android R开始引入) 类似源码里面的 ProtoLog.v,在userdebug版本可以动态打开
  • dalvik.vm.heapsize=24 要在什么文件中设置才生效? (在build.prop中设置很不方便, 每次编译都要改)
  • 说明 最近在了解虚拟机堆空间的参数,扩大APP的运行内存,主要了解...dalvik.vm.heapsize=512m dalvik.vm.heaptargetutilization=0.75 dalvik.vm.heapminfree=1m dalvik.vm.heapmaxfree=8m 网上搜索一下,资料挺多的,
  • increase dalvik vm heapsize

    千次阅读 2012-02-14 10:39:37
    修改 default.prop dalvik.vm.heapsize=24m
  • Android Dalvik VM内存优化之内存查看篇。 前序: Android采用Java语言(虽然官方认定Kotlin语言为新语言,目前已经替换中),而Java语言虚拟机为JVM,但是,Android的虽然使用Java语言,但是虚拟机是Dalvik ...
  • android dalvik heap 浅析

    万次阅读 多人点赞 2013-09-04 16:40:56
    详解android vm heap的三个参数,源码中跟着largeheap的流程,以及简要分析dalvik堆分配的策略。
  • 1.dalvik.vm.heapstartsize=8m(表示应用程序启动后为其分配的初始大小为8m) 这里分配的内存容量会影响到整个系统对RAM的使用程度,和第一次使用应用程序时的流畅程序。 这个值越大,系统消耗RAM则越快,但是应用...
  • -dalvik.vm.heapstartsize   堆分配的初始大小,调整这个值会影响到应用的流畅性和整体ram消耗。这个值越小,系统ram消耗越慢, 但是由于初始值较小,一些较大的应用需要扩张这个堆,从而引发gc和堆调整的...
  • 之前遇到一个Android上图片加载不出来的问题,在三星的note3上极容易出现,而在nexus 4上则很难出现。后来通过DDMS观察发现,是... 通过getprop拿到两个手机上dalvik虚拟机的参数,三星的note3上的dalvik.vm.heapgrowt
  • ART虚拟机中,堆(Heap)空间负责进行对象内存的分配。堆的大小也决定了一个应用可使用的内存大小。当应用内存量超过了Android系统给定的最大堆内存限制时,就会产生OOM。 我们接下来逐步分析,决定堆内存大小的因素...
  • dalvik.vm.heapsize=24m 虚拟内存范围由12M-48M, 默认是24M dalvik.vm.execution-mode=int:jit  dalvik.vm.lockprof.threshold=500 windowsmsg.max_events_per_sec=260 persist.service.mount.playsnd=0...
  • 下面输出的红色字体就是 android 允许进程分配的堆空间大小限制。 D:\>adb shell getprop ...[UserVolumeLabel]: [IFive] ...[dalvik.vm.dex2oat-Xms]: [64m] [dalvik.vm.dex2oat-Xmx]: [512m] [da
  • android 如何使用命令设置heapsize android中在涉及到需要分配大量内存的地方比如说图像处理,当dalvik对内存分配的过小会出现out of memory错误。 可以通过重新设置dalvik堆内存大小以及增长限制来解决...
  •  (堆最小空闲内存) [dalvik.vm.heapstartsize]: [8m] (表示应用程序启动后为其分配的初始大小) [dalvik.vm.heaptargetutilization]: [0.75] (堆利用率) 修改后参数 [dalvik.vm.heapgrowthlimit]: [128m] [dalvik....
  •      从Android程序员的角度理解JVM内存布局 前言    这个标题有点怪,啥叫从Android... size 278 bytes MD5 checksum b9bdf29ae16869b405a6b285a98e4625 Compiled from "OperandStackTest.java" public class ...
  • 用命令启动android模拟器并设置其内存大小的方法,,需要的朋友可以参考下
  • 修改Android手机的dalvik-heap的大小

    千次阅读 2013-03-12 17:58:49
    工作中遇到了一个需要debug的应用,需要去try修改dalvik.vm.heapgrowthlimit来check这个问题。所以,这里记录下,修改的方法:  1. dalvik.vm.heapgrowthlimit的设置在 /system/build.prop中  2. adb remount / ...
  • android 如何使用命令设置heapsize

    千次阅读 2012-10-15 12:56:39
    android中在涉及到需要分配大量内存的地方比如说图像处理,当dalvik对内存分配的过小会出现out of memory错误。 可以通过重新设置dalvik堆内存大小以及增长限制来解决这个问题。 Android命令行提供setprop和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,018
精华内容 1,607
关键字:

dalvik.vm.heapsize