您的位置:首页 > 其它

Dalvik控制VM详解

2016-12-23 14:26 190 查看
1.扩展的JNI检测

     JNI(Java native Interface)是Java本地接口,提供了Java语言程序调用本地(C/C++)代码的方法。为了能触发CheckJNI标志位,第二种特性是dalvik.vm.checkjni,它的值覆盖了ro.kernel.Android.checkjni的值。如果这个特性没有被定义,dalvik.vm.checkjni也没有设置成false,那么-Xcheck:jni标志位就没有传入,JNI检测也就没有是能。

打开JNI检测,使用以下命令:

adbshell setprop dalvik.vm.checkjni true

也可以通过系统特性将JNI检测选项传递给虚拟机,dalvik.vm.jniopts的值可以通过-Xjniopts参数,命令如下:

adb shellsetprop dalvik.vm.jniopts forcecopy

2.断言

设置dalvik.vm.enableassertions特性  dalvikm -ea..

命令如下:

adbshell setprop dalvik.vm.enableassertin all

3.字节码校验和优化

adbshell setprop dalvik.vm.dexopt-flags v=a o=v

那么Android框架将-Xverfy:all-Xdexopt:verified传递给虚拟机,使能校验并且只优化校验成功的class。这是最安全的设定,也是默认的。

   使能校验使得dexopt命令明显花费更多时间,因为校验过程相对较慢,一旦校验和优化过的dex文件准备就绪,校验就不会占用额外的开销,除非在加载与校验失败的class。

adbshell "rm /data/dalvik-cache/*"  它删除了暂存的dex文件,记住终止在打开运行时(adb shell stop: adb shell start).

4.Dalvik的运行模式

当前Dalvik VM的实现包括三个独立的解释内核:“快速”、“可移植”、“调试”.快速解释器是为当前平台优化的,可能包括手动优化的汇编文件;相对的,可移植解释器用C语言写的,可以在广泛的平台上使用;

     Dalvik vm允许用户通过-Xint参数在快速、可移植和JIT中选择,如为了选择可移植解释器,命令如下:

  adb shell setpropdalvik.vm.execution-mode int:portable

5.死锁预测

  如果虚拟机以WITH_DEADLOCK_PREDICTION参数编译,那么死锁预测器会在-Xdeadlockpredict参数中是能。

6.dump堆栈追踪

dalvik收到SIGQUIT,会为所有的线程dump所有的堆栈追踪。默认写入Android的日志,但是也可以写入一个文件。

  dalvik.vm.stack-trace-file特性允许你指定将线程堆栈跟踪写入文件名,如果不存在,将创建,新的信息将最佳到文件尾

adbshell setprop dalvik.vm.stack-trace-file /tmp/stack-traces.txt

7.dex文件和校验

为了快速诊断这种失败,虚拟机提供了-Xchekdexsum参数,如果设置了该参数,在内容被使用之前所有的.dex文件会进行和检验。

adbshell setprop dalvk.vm.check-dex-sum true

8.产生标志位

在Honeycomb版本引入了汇编,通过标志位写入虚拟机。

adb shell setprop dalvik.vm.extra-opts "flag1flag2...flagN"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: