免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2152 | 回复: 0
打印 上一主题 下一主题

[译]Android文档----dalvik 之一 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-15 11:33 |只看该作者 |倒序浏览
嵌入式虚拟机控制    *概述    *扩展JNI检查    *断言    *字节码验证和优化    *执行模式    *死锁预测    *堆栈转储#############################################概览Dalvik虚拟机支持各种命令行参数(通过adb shell dalvikvm - help来获取帮助手册),但它不可能通过Android应用程序运行环境传递任意参数。此外,可以通过设置某些系统属影响虚拟机的行为。 对于下面描述的所有功能,均可以通过setprop命令设置系统属性,例如:adb shell setprop  这些命令需要重启Android运行环境才能生效。(adb shell stop;adb shell start). 这是因为所有的设置均在"zygote"守护进程中处理。你还可以通过在/data/local.prop中增加: = 来设置系统属性。这些改动需要在系统重启后生效,但是会被wipe data(清除Data分区)命令删除。(提示: 可以在本地创建local.prop,并且通过adb push local.pro /data传入)################################################扩展JNI检查JNI, 即Java本地接口,提供用Java编程语言编写的代码与C/C++代码交互的一种方式。扩展的JNI检查会导致系统运行变慢,但是他们可以在很多Bug导致严重问题前发现这些Bug.可以通过-Xcheck:jni命令行参数启用扩展JNI检查。有两个系统属性影响这项功能:首先是ro.kernel.android.checkjni,这个在Android编译系统中编译开发版本时设置。(在Android模拟器上,除非启动模拟器时设置了模拟器命令行参数-nojni,否则该功能都默认被启用)。因为这是一个"ro."属性,一旦设备启动,该属性便不能被改变。译者添加:PS: Android编译系统里设置ro.kernel.android.checkjni 位于 build/core/main.mk 中。为了允许切换该CheckJNI标志,第二个属性即dalvik.vm.checkjni,也会被检查。这个属性值会覆盖ro.kernel.android.checkjni.如果这两个系统属性值均没有被定义,或者dalvik.vm.checkjni被设置为false.-Xcheck:jni 设置的参数也不会被传入,并且也不会启用JNI检查。打开JNI检查:adb shell setprop dalvik.vm.checkjni true也可以通过 -Xjniopts 参数设置dalvik.vm.jniopts值,打开虚机的JNI-checking选项。了解更多 JNI checks信息,请看 JNI tips.################################################断言Dalvik虚拟机支持Java编程语言“断言”.默认情况下该支持是关闭的,但是提供通过 -ea参数设置dalvik.vm.enableassertion值。该参数与在其他VM中的作用相同。你可以传入一个类名,包名,或者特殊值"all".例如:adb shell setprop dalvik.vm.enableassertions all在所有非系统类里,可以进行断言。该系统属性比起full command line有很多限制。 这是因为不能指定多个-ea入口,并且也无法指定一个-da入口。目前没有提供与-esa/-dsa等价的功能。################################################字节码验证与优化 系统试图预先验证dex文件中的所有类,以减少类加载开销,并进行一系列优化来提高运行性能。无论是在编译还是安装,预验证与优化均通过调用dexopt命令执行。在开发版本中,dexopt将会在dex文件第一次被使用以及该文件或其依赖的文件被更新时执行(“just-in-time”实时优化和验证)。有两个命令标志来控制实时验证和优化,即-Xverify以及-Xdexopt.Android framework会基于dalvik vm.dexopt标志来配置这些属性。如果设置:adb shell setprop dalvik.vm.dexopt-flags v=a,o=vframework则会传递 -Xverify:all -Xdexopt:verified 参数到vm.打开验证,并且验证成功后进行类的优化。这是最安全的,也是默认的设置。也可以设置dalvik.vm.dexopt-flags为v=n,framwork则会传递 -Xvreify:none -Xdexopt:verified参数来禁止验证。(我们可以传递 -Xdexopt:all 来允许优化,但是不一定会优化更多的代码,因为类验证失败很可能会导致跳过类的优化)。没有经过dexopt验证的类,将会作为未经核实的代码加载并执行。启用验证将会似的dexopt命令执行时间大大延长,因为验证过程是非常耗时的。一旦dex文件已经经过验证和优化,除非之前的验证失败,再次验证则不会花费额外的开销。如果一开始禁用了验证,而之后又将验证打开,加在应用程序的速度将会显著下降(大约40%或更多),因为在第一次使用时会进行类的验证。为了获得最佳效果,应当在该属性改变时就对所有dex文件强制执行re-dexopt。adb shell "rm /data/dalvik-cache/*"这会清除dex文件的缓存版本。记住要停止并且重启运行环境。(adb shell stop;adb shell start)################################################
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85193/showart_2094869.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP