卧槽 原生安卓6.0原生系统下载还是dalvik什么鬼

更流畅体验佳 可升级安卓6.0机型盘点
发布一个月来市面上已经升级Android 6.0的机型仍然少之又少,根据最新的Android平台数据分布统计,在10月份Android 6.0 Marshmallow活跃Android手机中的占有率只有可怜的0.3%。不过这一状况会很快得到改善,国内外手机厂商已纷纷公布自己的安卓6.0升级计划。
网易手机原创稿件,转载请注明出处自从2008年9月,谷歌正式发布Android 1.0系统至今已经历了七年多的光景,在这七年多时间里Android不断更迭,在手机界的地位也从初生婴儿成长为称霸一方的王者。今年的9月30日谷歌在美国旧金山举行2015年秋季新品发布会上正式推出了代号为“Marshmallow(棉花糖)”的安卓6.0系统。在Android 5.X系统中ART已经取代Dalvik成为默认选项,系统执行效率大大提高,而全新的Android 6.0在5.X的基础上又加入了诸多新特性,在系统体验上有了更为精细的优化,具体的全新的Android 6.0相比目前的Android 5.0有六项重大的改进:软件权限管理(App Pers)在安卓6.0里,应用许可提示可以自定义。它允许对应用的权限进行高度管理,应用能否使用位置、相机、麦克风、通讯录等,都可以开放给开发者和用户。网页体验提升(Chro Custom Tabs)安卓6.0对于Chrome的网页浏览体验进行了提升,它对登陆网站、存储密码、自动补全资料、多线程浏览网页的安全性进行了一些列的优化。
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img4./photo/-10/600x450_BQJ50011.jpg
http://img3./photo/-10/t_BQJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img2./photo/-10/600x450_B8011.jpg
http://img5./photo/-10/t_B8011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B8011.jpg
http://img3./photo/-10/t_B8011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_BQJ50011.jpg
http://img6./photo/-10/t_BQJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img4./photo/-10/600x450_BQJ50011.jpg
http://img5./photo/-10/t_BQJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_B011.jpg
http://img5./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B011.jpg
http://img2./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img6./photo/-10/600x450_BQJ50011.jpg
http://img6./photo/-10/t_BQJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_B011.jpg
http://img3./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img2./photo/-10/600x450_B011.jpg
http://img4./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B011.jpg
http://img3./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B8350SSS5QJ50011.jpg
http://img3./photo/-10/t_B8350SSS5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_B8350RTT5QJ50011.jpg
http://img4./photo/-10/t_B8350RTT5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_BQJ50011.jpg
http://img5./photo/-10/t_BQJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img2./photo/-10/600x450_B011.jpg
http://img6./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B8350OUB5QJ50011.jpg
http://img2./photo/-10/t_B8350OUB5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B8350NSA5QJ50011.jpg
http://img3./photo/-10/t_B8350NSA5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_BQJ50011.jpg
http://img6./photo/-10/t_BQJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_B011.jpg
http://img5./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_B8350KQK5QJ50011.jpg
http://img2./photo/-10/t_B8350KQK5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_BQJ50011.jpg
http://img2./photo/-10/t_BQJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img2./photo/-10/600x450_B8350JFF5QJ50011.jpg
http://img5./photo/-10/t_B8350JFF5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img2./photo/-10/600x450_B8350IDS5QJ50011.jpg
http://img6./photo/-10/t_B8350IDS5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img2./photo/-10/600x450_B8350HKB5QJ50011.jpg
http://img4./photo/-10/t_B8350HKB5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B8350GVH5QJ50011.jpg
http://img5./photo/-10/t_B8350GVH5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B011.jpg
http://img3./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img3./photo/-10/600x450_B011.jpg
http://img3./photo/-10/t_B011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img5./photo/-10/600x450_B8350EIK5QJ50011.jpg
http://img4./photo/-10/t_B8350EIK5QJ50011.jpg
华为出品 NEXUS 6P开箱体验
Nexus 6P搭载一枚5.7英寸AMOLED液晶屏,采用高通骁龙810八核处理器,采用的3GB RAM+32GB/64GB/128GB ROM让操控更加流畅。
http://img4./photo/-10/600x450_B8350DAJ5QJ50011.jpg
http://img3./photo/-10/t_B8350DAJ5QJ50011.jpg
图集已浏览完毕重新浏览
华为 Nexus 6P(移动4G):场景:实拍图
http://img2./photo/-12/600x450_B5O7QI7F53DA0011.jpg
http://img5./photo/-12/t_B5O7QI7F53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7R3BA53DA0011.jpg
http://img5./photo/-12/t_B5O7R3BA53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img4./photo/-12/600x450_B5O7R4AJ53DA0011.jpg
http://img6./photo/-12/t_B5O7R4AJ53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img2./photo/-12/600x450_B5O7R4UD53DA0011.jpg
http://img4./photo/-12/t_B5O7R4UD53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7R5E953DA0011.jpg
http://img3./photo/-12/t_B5O7R5E953DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7R5RL53DA0011.jpg
http://img6./photo/-12/t_B5O7R5RL53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7R6HG53DA0011.jpg
http://img4./photo/-12/t_B5O7R6HG53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img6./photo/-12/600x450_B5O7R6V353DA0011.jpg
http://img3./photo/-12/t_B5O7R6V353DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img2./photo/-12/600x450_B5O7R7HS53DA0011.jpg
http://img5./photo/-12/t_B5O7R7HS53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img4./photo/-12/600x450_B5O7R84A53DA0011.jpg
http://img6./photo/-12/t_B5O7R84A53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7R8KU53DA0011.jpg
http://img5./photo/-12/t_B5O7R8KU53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7R98T53DA0011.jpg
http://img2./photo/-12/t_B5O7R98T53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7R9TN53DA0011.jpg
http://img3./photo/-12/t_B5O7R9TN53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img5./photo/-12/600x450_B5O7RADM53DA0011.jpg
http://img2./photo/-12/t_B5O7RADM53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img4./photo/-12/600x450_B5O7RAS953DA0011.jpg
http://img3./photo/-12/t_B5O7RAS953DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7RBJL53DA0011.jpg
http://img5./photo/-12/t_B5O7RBJL53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img5./photo/-12/600x450_B5O7RC5N53DA0011.jpg
http://img2./photo/-12/t_B5O7RC5N53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7RCV253DA0011.jpg
http://img4./photo/-12/t_B5O7RCV253DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img6./photo/-12/600x450_B5O7RDJ953DA0011.jpg
http://img4./photo/-12/t_B5O7RDJ953DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img5./photo/-12/600x450_B5O7RER653DA0011.jpg
http://img4./photo/-12/t_B5O7RER653DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img2./photo/-12/600x450_B5O7RFI153DA0011.jpg
http://img2./photo/-12/t_B5O7RFI153DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img4./photo/-12/600x450_B5O7RG8T53DA0011.jpg
http://img4./photo/-12/t_B5O7RG8T53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img4./photo/-12/600x450_B5O7RH5M53DA0011.jpg
http://img4./photo/-12/t_B5O7RH5M53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7RI0R53DA0011.jpg
http://img2./photo/-12/t_B5O7RI0R53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img6./photo/-12/600x450_B5O7RIQQ53DA0011.jpg
http://img6./photo/-12/t_B5O7RIQQ53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img3./photo/-12/600x450_B5O7RJFF53DA0011.jpg
http://img6./photo/-12/t_B5O7RJFF53DA0011.jpg
华为 Nexus 6P(移动4G):场景:实拍图
http://img5./photo/-12/600x450_B5O7RK7O53DA0011.jpg
http://img5./photo/-12/t_B5O7RK7O53DA0011.jpg
图集已浏览完毕重新浏览
本文来源:网易手机
责任编辑:吴波_NT3514
关键词阅读:
不做嘴炮 只管约到
跟贴热词:
文明上网,登录发贴
网友评论仅供其表达个人看法,并不表明网易立场。
热门产品:   
:        
:         
热门影院:
用微信扫描二维码分享至好友和朋友圈后使用快捷导航没有帐号?
只需一步,快速开始
查看: 7|回复: 7
在线时间14 小时经验值279 最后登录注册时间帖子阅读权限50UID2377809
大学专科, 积分 279, 距离下一级还需 121 积分
TA的每日心情怒 09:19签到天数: 1 天[LV.1]初来乍到
G币0 最后登录注册时间
马上注册,结交更多机友,下载更多应用,让你轻松玩转手机。
已有帐号?   下载游戏和软件,请【】进入机锋市场!
在WIFI的流量统计里面,在移动数据里面也有
应用为1 等,很奇怪,找不到对于的程序,不知道是何方神圣,有人知道吗?求告知!!
具体情况如下图:
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间111 小时经验值19509 最后登录注册时间帖子阅读权限200UID
TA的每日心情奋斗 23:27签到天数: 2567 天[LV.Master]伴坛终老
G币503238 最后登录注册时间
你卸载了对应的app了
在线时间44 小时经验值4403 最后登录注册时间帖子阅读权限153UID8042625
TA的每日心情慵懒 11:38签到天数: 490 天[LV.9]以坛为家II
G币10317 最后登录注册时间
貌似是已经删掉的应用,删之前耗电统计,重启手机,以后就没有了
在线时间14 小时经验值279 最后登录注册时间帖子阅读权限50UID2377809
大学专科, 积分 279, 距离下一级还需 121 积分
TA的每日心情怒 09:19签到天数: 1 天[LV.1]初来乍到
G币0 最后登录注册时间
メ'_怀|_℡ 发表于
貌似是已经删掉的应用,删之前耗电统计,重启手机,以后就没有了
重启了还是会有,
这个是流量消耗的,原则上删除的程序,会在“已经删除的程序”里面,
额,只有再观察了
在线时间44 小时经验值4403 最后登录注册时间帖子阅读权限153UID8042625
TA的每日心情慵懒 11:38签到天数: 490 天[LV.9]以坛为家II
G币10317 最后登录注册时间
dscrlc 发表于
重启了还是会有,
这个是流量消耗的,原则上删除的程序,会在“已经删除的程序”里面,
噢,不好意思,我把看成耗电统计那个了。。&&不过一般都是删掉的程序会显示成数字...
在线时间14 小时经验值279 最后登录注册时间帖子阅读权限50UID2377809
大学专科, 积分 279, 距离下一级还需 121 积分
TA的每日心情怒 09:19签到天数: 1 天[LV.1]初来乍到
G币0 最后登录注册时间
メ'_怀|_℡ 发表于
噢,不好意思,我把看成耗电统计那个了。。&&不过一般都是删掉的程序会显示成数字...
安卓确实每个应用都有个UDI是从1000开头的,应该是你说的
在线时间44 小时经验值4403 最后登录注册时间帖子阅读权限153UID8042625
TA的每日心情慵懒 11:38签到天数: 490 天[LV.9]以坛为家II
G币10317 最后登录注册时间
dscrlc 发表于
安卓确实每个应用都有个UDI是从1000开头的,应该是你说的
你再观望观望吧,不过我用这么久安卓还真没遇到过这种情况
在线时间107 小时经验值987 最后登录注册时间帖子阅读权限70UID
学士, 积分 987, 距离下一级还需 113 积分
TA的每日心情无聊 18:08签到天数: 52 天[LV.5]常住居民I
G币111 最后登录注册时间
楼主人次& &从未发现这种情况
在线时间37 小时经验值1456 最后登录注册时间帖子阅读权限80UID
研究生, 积分 1456, 距离下一级还需 244 积分
TA的每日心情无聊 15:57签到天数: 341 天[LV.8]以坛为家I
G币3989 最后登录注册时间
wipe试试吧
Powered byDalvik虚拟机垃圾收集机制简要介绍和学习计划 - 安卓 - 伯乐在线
& Dalvik虚拟机垃圾收集机制简要介绍和学习计划
之所以说理解Dalvik虚拟机的垃圾收集机制对学习ART运行时的垃圾收集机制有帮助,是因为两者都使用到了一些共同或者相通的技术,并且前者的实现相对简单一些。这样我们就可以从简单的学起。等到有了一定的基础之后,再学习复杂的就会容易理解很多。
好了,废话不多说,我们开始介绍Dalvik虚拟机的垃圾收集机制涉及到的基本概念或者说术语,如图1所示:
图1 Dalvik虚拟机垃圾收集机制的基本概念
Dalvik虚拟机用来分配对象的堆划分为两部分,一部分叫做Active Heap,另一部分叫做Zygote Heap。从前面这篇文章可以知道,Android系统的第一个Dalvik虚拟机是由Zygote进程创建的。再结合这篇文章,我们可以知道,应用程序进程是由Zygote进程fork出来的。也就是说,应用程序进程使用了一种写时拷贝技术(COW)来复制了Zygote进程的地址空间。这意味着一开始的时候,应用程序进程和Zygote进程共享了同一个用来分配对象的堆。然而,当Zygote进程或者应用程序进程对该堆进行写操作时,内核就会执行真正的拷贝操作,使得Zygote进程和应用程序进程分别拥有自己的一份拷贝。
拷贝是一件费时费力的事情。因此,为了尽量地避免拷贝,Dalvik虚拟机将自己的堆划分为两部分。事实上,Dalvik虚拟机的堆最初是只有一个的。也就是Zygote进程在启动过程中创建Dalvik虚拟机的时候,只有一个堆。但是当Zygote进程在fork第一个应用程序进程之前,会将已经使用了的那部分堆内存划分为一部分,还没有使用的堆内存划分为另外一部分。前者就称为Zygote堆,后者就称为Active堆。以后无论是Zygote进程,还是应用程序进程,当它们需要分配对象的时候,都在Active堆上进行。这样就可以使得Zygote堆尽可能少地被执行写操作,因而就可以减少执行写时拷贝的操作。在Zygote堆里面分配的对象其实主要就是Zygote进程在启动过程中预加载的类、资源和对象了。这意味着这些预加载的类、资源和对象可以在Zygote进程和应用程序进程中做到长期共享。这样既能减少拷贝操作,还能减少对内存的需求。
明白了Dalvik虚拟机为什么要把用来分配对象的堆划分为Active堆和Zygote堆之后,我们再看到底堆是个什么东西,请看图2:
图2 Dalvik虚拟机的堆
在Dalvik虚拟机中,堆实际上就是一块匿名共享内存。关于Android系统的匿名共享内存,可以参考这个系列的文章。Dalvik虚拟机并不是直接管理这块匿名共享内存,而是将它封装成一个mspace,交给C库来管理。mspace是libc中的概念,我们可以通过libc提供的函数create_mspace_with_base创建一个mspace,然后再通过mspace_开头的函数管理该mspace。例如,我们可以通过mspace_malloc和mspace_bulk_free来在指定的mspace中分配和释放内存。实际上,我们在使用libc提供的函数malloc和free分配和释放内存时,也是在一个mspace进行的,只不过这个mspace是由libc默认创建的。
Dalvik虚拟机除了要给应用层分配对象之外,最重要的还是要对这些已经分配出去的对象进行管理,也就是要在对象不再被使用的时候,对其进行自动回收。没吃过猪肉,也见过猪跑,自动回收对象(也就是垃圾收集)的算法不用多说,就是耳熟能详的Mark-Sweep算法。
顾名思义,Mark-Sweep垃圾收集算法主要分为两个阶段:Mark和Sweep。Mark阶段从对象的根集开始标记被引用的对象。标记完成后,就进入到Sweep阶段,而Sweep阶段所做的事情就是回收没有被标记的对象占用的内存。这里涉及到的一个核心概念就是我们怎么标记对象有没有被引用的,换句说就是通过什么数据结构来描述对象有没有被引用。是的,就是图1中的Heap Bitmap了。Heap Bitmap的结构如图3所示:
图3 Heap Bitmap
从名字就可以推断出,Heap Bitmap使用位图来标记对象是否被使用。如果一个对象被引用,那么在Bitmap中与它对应的那一位就会被设置为1。否则的话,就设置为0。在Dalvik虚拟机中,使用一个unsigned long数组来描述一个Heap Bitmap。我们假设堆的大小为Max Heap Size。我们使用libc提供的函数mspace_malloc来从堆里面分配内存时,得到的内存的地址总是对齐到HB_OBJECT_ALIGNMENT的。HB_OBJECT_ALIGNMENT的值等于8,也就是说,我们分配的对象的地址的最低三位总是0。这意味着我们在考虑Bitmap中的位与对象的对应关系时,可以不考虑这最低三位的值。这样可以大大地减少Bitmap的大小。例如,在32位设备上,每一个对象的地址都有32位,除去最低的三位,我们在考虑Bitmap与对象的对应关系时,只需要考虑高29位就可以了。因此,在计算所需要的Bitmap的大小时,就可以将堆的大小值除以HB_OBJECT_ALIGNMENT,即除以8。
假设一个unsigned long数占HB_BITS_PER_WORD个位,那么,我们就需要一个大小为(Max Heap Size /
HB_OBJECT_ALIGNMENT / HB_BITS_PER_WORD)的unsigned long数组来描述一个大小为Max Heap Size的堆。在32位设备上,一个unsigned long数占用32位,即HB_BITS_PER_WORD的值等于32。综合上面的描述,我们就可以知道,一个大小为Max Heap Size的堆需要一个大小为(Max Heap Size / 8 / 32)的unsigned long数组来描述,即需要一块字节数等于(Max Heap Size / 8 / 32)× 4的内存来描述。
在图1中,我们使用了两个Bitmap来描述堆的对象,一个称为Live Bitmap,另一个称为Mark Bitmap。Live Bitmap用来标记上一次GC时被引用的对象,也就是没有被回收的对象,而Mark Bitmap用来标记当前GC有被引用的对象。有了这两个信息之后,我们就可以很容易地知道哪些对象是需要被回收的,即在Live Bitmap在标记为1,但是在Mark Bitmap中标记为0的对象。
在垃圾收集的Mark阶段,要求除了垃圾收集线程之外,其它的线程都停止,否则的话,就会可能导致不能正确地标记每一个对象。这种现象在垃圾收集算法中称为Stop The World,会导致程序中止执行,造成停顿的现象。为了尽可能地减少停顿,我们必须要允许在Mark阶段有条件地允许程序的其它线程执行。这种垃圾收集算法称为并行垃圾收集算法(Concurrent GC)。
为了实现Concurrent GC,Mark阶段又划分两个子阶段。第一个子阶段只负责标记根集对象。所谓的根集对象,就是指在GC开始的瞬间,被全局变量、栈变量和寄存器等引用的对象。有了这些根集变量之后,我们就可以顺着它们找到其余的被引用变量。例如,一个栈变量引了一个对象,而这个对象又通过成员变量引用了另外一个对象,那该被引用的对象也会同时标记为正在使用。这个标记被根集对象引用的对象的过程就是第二个子阶段。在Concurrent GC,第一个子阶段是不允许垃圾收集线程之外的线程运行的,但是第二个子阶段是允许的。不过,在第二个子阶段执行的过程中,如果一个线程修改了一个对象,那么该对象必须要记录起来,因为它很有可能引用了新的对象,或者引用了之前未引用过的对象。如果不这样做的话,那么就会导致被引用对象还在使用然而却被回收。这种情况出现在只进行部分垃圾收集的情况,这时候Card Table的作用就是用来记录非垃圾收集堆对象对垃圾收集堆对象的引用。Dalvik虚拟机进行部分垃圾收集时,实际上就是只收集在Active堆上分配的对象。因此对Dalvik虚拟机来说,Card Table就是用来记录在Zygote堆上分配的对象在部收垃圾收集执行过程中对在Active堆上分配的对象的引用。
我们是不是想到再用一个Bitmap在描述上述第二个子阶段被修改的对象呢?虽然我们尽大努力减少了用来标记对象的Bitmap的大小,不过还是比较可观的。因此,为了减少内存的消耗,我们使用另外一种技术来标记Mark第二子阶段被修改的对象。这种技术使用到了一种称为Card Table的数据结构,如图4所示:
图4 Card Table
从名字可以看出,Card Table由Card组成,一个Card实际上就是一个字节,它的值要么是CLEAN,要么是DIRTY。如果一个Card的值是CLEAN,就表示与它对应的对象在Mark第二子阶段没有被程序修改过。否则的话,就意味着被程序修改过,对于这些被修改过的对象。需要在Mark第二子阶段结束之后,再次禁止垃圾收集线程之外的其它线程执行,以便垃圾收集线程再次根据Card Table记录的信息对被修改过的对象引用的其它对象进行重新标记。由于Mark第二子阶段执行的时间不会太长,因此在该阶段被修改的对象不会很多,这样就可以保证第二次子阶段结束后,再次执行标记对象的过程是很快的,因而此时对程序造成的停顿非常小。
在Card Table中,在连续GC_CARD_SIZE地址中的对象共用一个Card。Dalvik虚拟机将GC_CARD_SIZE的值设置为128。因此,假设堆的大小为Max Heap Size,那么我们只需要一块字节数为(Max Heap Size / 128)的Card Table。相比大小为(Max Heap Size / 8 / 32)× 4的Bitmap,减少了一半的内存需求。
在Mark阶段,Dalvik虚拟机能过递归方式来标记对象。但是,这不是通过函数的递归调用来实现的,而是借助一个称为Mark Stack的栈来实现的。具体来说,当我们标记完成根集对象之后,就按照它们的地址从小到大的顺序标记它们所引用的其它对象。假设有A、B、C和D四个对象,它的地址大小关系为A & B & C & D,其中,B和D是根集对象,A被D引用,C没有被B和D引用。那么我们将依次遍历B和D。当遍历到B的时候,没有发现它引用其它对象,然后就继续向前遍历D对象。发现它引用了A对象。按照递归的算法,这时候除了标记A对象是正在使用之外,还应该去检查A对象有没有引用其它对象,然后又再检查它引用的对象有没有又引用其它的对象,一直这样遍历下去。这样就跟函数递归一样。更好的做法是将对象A记录在一个Mark Stack中,然后继续检查地址值比对象D大的其它对象。对于地址值比对象D大的其它对象,如果它们引用了一个地址值比它们小的其它对象,那么这些其它对象同样要记录在Mark Stack中。等到该轮检查结束之后,再回过头来检查记录在Mark Stack里面的对象。然后又重复上述过程,直到Mark Stack等于空为止。
这就是我们在图1中显示的Mark Stack的作用,它的具体结构如图5所示:
图5 Mark Stack
在Dalvik虚拟机中,每一个对象都是从Object类继承下来的,也就是说,每一个对象占用的内存大小都至少等于sizeof(Object)。此外,我们通过libc提供的函数mspace_malloc为对象分配内存时,libc需要额外的内存来记录被分配出去的内存的信息。例如,需要记录被分配出去的内存的大小。每一块分配出去的内存需要额外的HEAP_SOURCE_CHUNK_OVERHEAD内存来记录上述的管理信息。因此,在Dalvik虚拟机中,每一个对象的大小都至少为sizeof(Object) + HEAP_SOURCE_CHUNK_OVERHEAD。这就意味着对于一个大小为Max Heap Size的堆来说,最多可以分配Max Heap Size / (sizeof(Object) + HEAP_SOURCE_CHUNK_OVERHEAD)个对象。于是,在最坏情况下,我们就需要一个大小为(Max Heap Size / (sizeof(Object) + HEAP_SOURCE_CHUNK_OVERHEAD))的Object*数组来描述Mark Stack,以便可以实现上述的非递归函数调用的递归标记算法。
至此,我们就对Dalvik虚拟机的垃圾收集机制中涉及到的基础概念分析完成了。没有结合代码来分析,可能这些概念一时还难以理解通透。不过不要紧,接下来我们将按照以下三个情景来结合源码深入分析上述的概念:
按照这三个情景学习Davlik虚拟机的垃圾收集机制之后,我们就会对上面涉及的概念有一个清晰的认识了,同时也会我们后面学习ART运行时的垃圾收集机集打下坚实的基础。敬请关注!想了解更多信息,也可以关注老罗的新浪微博:。
可能感兴趣的话题
关于安卓频道
安卓频道分享Android开发文章,精选工具和安卓相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线

我要回帖

更多关于 小米4刷原生安卓6.0 的文章

 

随机推荐