【发布时间】:2014-06-20 08:32:29
【问题描述】:
问题:
Dex 优化会在我们每次重启设备时进行吗?还是将dex文件存入系统本身,二次使用?
目录:系统/框架
文件:core.jar、core-junit.jar、framework.jar 等...
源码分析:
看起来,系统检查缓存中是否已经存在dex文件,如果存在则忽略,如果不存在则创建dex文件。
http://androidxref.com/4.1.2/xref/dalvik/vm/RawDexFile.cpp:
optFd = dvmOpenCachedDexFile(fileName, cachedName, modTime,
adler32, isBootstrap, &newFile, /*createIfMissing=*/true);
This 'newFile' flag tells if dex file exists in the cache,
下面是对文件实际调用 dex 优化的代码。
if (newFile) {
......
result = dvmOptimizeDexFile(optFd, dexOffset, fileSize,
fileName, modTime, adler32, isBootstrap);
Logcat 输出:
03-29 12:16:59.617 D/dalvikvm( 1071): DexOpt: --- END 'core.jar' (success) ---
03-29 12:16:59.617 D/dalvikvm( 1071): DEX prep '/system/framework/core.jar': unzip in 239ms, rewrite 3943ms
03-29 12:16:59.617 D/dalvikvm( 1071): DexOpt: --- BEGIN 'core-junit.jar' (bootstrap=1) ---
03-29 12:16:59.664 D/dalvikvm( 1372): DexOpt: load 4ms, verify+opt 10ms, 137044 bytes
03-29 12:17:00.250 D/dalvikvm( 1071): DexOpt: --- END 'core-junit.jar' (success) ---
03-29 12:17:00.250 D/dalvikvm( 1071): DEX prep '/system/framework/core-junit.jar': unzip in
0ms, rewrite 627ms
03-29 12:17:00.304 D/dalvikvm( 1071): DexOpt: --- BEGIN 'bouncycastle.jar' (bootstrap=1) ---
03-29 12:17:00.882 D/dalvikvm( 1373): DexOpt: load 25ms, verify+opt 463ms, 598508 bytes
03-29 12:17:01.507 D/dalvikvm( 1071): DexOpt: --- END 'bouncycastle.jar' (success) ---
03-29 12:17:01.507 D/dalvikvm( 1071): DEX prep '/system/framework/bouncycastle.jar': unzip
in 49ms, rewrite 1204ms
03-29 12:17:01.632 D/dalvikvm( 1071): DexOpt: --- BEGIN 'ext.jar' (bootstrap=1) ---
【问题讨论】:
标签: android dalvik dex android-framework