ART and Dalvik
Dalvik虛擬機(jī),是Google等廠商合作開(kāi)發(fā)的Android移動(dòng)設(shè)備平臺(tái)的核心組成部分之一。它可以支持已轉(zhuǎn)換為.dex(即“Dalvik Executable”)格式的Java應(yīng)用程序的運(yùn)行。.dex格式是專為Dalvik設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。
大多數(shù)虛擬機(jī)包括JVM都是一種堆棧機(jī)器,而Dalvik虛擬機(jī)則是寄存器機(jī)。兩種架構(gòu)各有優(yōu)劣,一般而言,基于堆棧的機(jī)器需要更多指令,而基于寄存器的機(jī)器指令更長(zhǎng)。
從Android 5.0版起,Android Runtime(ART)替換Dalvik成為系統(tǒng)內(nèi)默認(rèn)虛擬機(jī)。(這不代表你的手機(jī)用的6.0系統(tǒng),使用的就是ART虛擬機(jī),國(guó)產(chǎn)Android系統(tǒng)中很多升級(jí)為6.0系統(tǒng)的任然使用的是Dalvik)
Android Runtime(縮寫(xiě)為ART),是一種在Android操作系統(tǒng)上的運(yùn)行環(huán)境,由Google公司研發(fā),并在2013年作為Android 4.4系統(tǒng)中的一項(xiàng)測(cè)試功能正式對(duì)外發(fā)布,在Android 5.0及后續(xù)Android版本中作為正式的運(yùn)行時(shí)庫(kù)取代了以往的Dalvik虛擬機(jī)。ART能夠把應(yīng)用程序的字節(jié)碼轉(zhuǎn)換為機(jī)器碼,是Android所使用的一種新的虛擬機(jī)。它與Dalvik的主要不同在于:Dalvik采用的是JIT技術(shù),而ART采用Ahead-of-time(AOT)技術(shù)。ART同時(shí)也改善了性能、垃圾回收(Garbage Collection)、應(yīng)用程序除錯(cuò)以及性能分析。

demo
public CharSequence getCurrentRuntimeValue() {
String SELECT_RUNTIME_PROPERTY = "persist.sys.dalvik.vm.lib";
String LIB_DALVIK = "libdvm.so";
String LIB_ART = "libart.so";
String LIB_ART_D = "libartd.so";
try {
Class<?> systemProperties = Class.forName("android.os.SystemProperties");
try {
Method get = systemProperties.getMethod("get",
String.class, String.class);
if (get == null) {
return "未獲取到";
}
try {
final String value = (String) get.invoke(
systemProperties, SELECT_RUNTIME_PROPERTY,
/* Assuming default is */"Dalvik");
if (LIB_DALVIK.equals(value)) {
return "Dalvik";
} else if (LIB_ART.equals(value)) {
return "ART";
} else if (LIB_ART_D.equals(value)) {
return "ART debug build";
}
return value;
} catch (IllegalAccessException e) {
return "IllegalAccessException";
} catch (IllegalArgumentException e) {
return "IllegalArgumentException";
} catch (InvocationTargetException e) {
return "InvocationTargetException";
}
} catch (NoSuchMethodException e) {
return "SystemProperties.get(String key, String def) method is not found";
}
} catch (ClassNotFoundException e) {
return "SystemProperties class is not found";
}
}
代碼參考自:http://stackoverflow.com/questions/19830342/how-can-i-detect-the-android-runtime-dalvik-or-art