Dalvik控制VM详解
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"
總結
以上是生活随笔為你收集整理的Dalvik控制VM详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dalvik VM的主要特征
- 下一篇: Dalvik Vm架构