Android 應(yīng)用獲取手機(jī)的虛擬機(jī)類(lèi)型

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ò)以及性能分析。

Dalvik虛擬機(jī)和ART原理的對(duì)比

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容