1libcore目录的调整
/dalvik/libcore 整个目录调整到根目录,即2.3中libcore与dalvik处于同一级目录。
2 支持多核处理器
ifeq ($(TARGET_CPU_SMP),true)
target_smp_flag := -DANDROID_SMP=1
3 针对ARM架构默认打开JIT
/gingerbread/build/core/combo/TARGET_linux-arm.mk中
ifeq ($(strip $(WITH_JIT)),)
WITH_JIT := true
endif
4 针对ARM架构,在打开JIT的情况下,android会编译出3个*.so
libdvm_assert.so
LOCAL_CFLAGS += -UNDEBUG -DDEBUG=1 -DLOG_NDEBUG=1 -DWITH_DALVIK_ASSERT \
-DWITH_JIT_TUNING $(target_smp_flag)
libdvm_sv.so
LOCAL_CFLAGS += -UNDEBUG -DDEBUG=1 -DLOG_NDEBUG=1 -DWITH_DALVIK_ASSERT \
-DWITH_SELF_VERIFICATION $(target_smp_flag)
libdvm_interp.so
WITH_JIT := false
5 解释器C文件的调整LOCAL_SRC_FILES:\
增加:
+Atomic.c.arm \
+TestCompability.c \
+alloc/CardTable.c\
+ alloc/Verify.c\
+alloc/Visit.c \
减少:
-alloc/HeapSource.c \
-alloc/MarkSweep.c.arm \
-native/dalvik_system_SamplingProfi
-native/SystemThread.c \
更改:
C-analysis/DexOptimize.c TO analysis/DexPrepare.c
C-analysis/ReduceConstants.c TO analysis/Optimize.c
C-test/AtomicSpeed.c TO test/AtomicTest.c.arm
6 虚拟机编译器源码的调整compiler(左边为2.3)
ifeq ($(WITH_JIT),true) | ifeq ($(WITH_JIT),true)
LOCAL_CFLAGS += -DWITH_JIT | LOCAL_CFLAGS += -DWITH_JIT
LOCAL_SRC_FILES += \ | LOCAL_SRC_FILES += \
| ../dexdump/OpCodeNames.c \
compiler/Compiler.c \ | compiler/Compiler.c \
compiler/Frontend.c \ | compiler/Frontend.c \
compiler/Utility.c \ | compiler/Utility.c \
compiler/InlineTransformation.c \ |
compiler/IntermediateRep.c \ | compiler/IntermediateRep.c \
compiler/Dataflow.c \ |
compiler/Loop.c \ |
compiler/Ralloc.c \ |
interp/Jit.c | interp/Jit.c
endif | endif
7 解释器指令的增加
下面的内容可以说是android升级后针对dalvik部分最大的改动,因为它增加了14条解释器指令。也就是说,由2.3编译也来的*.apk将不向下兼容了。我们来看看增加了哪14条指令:
OP_IGET_VOLATILE = 0xe3,
OP_IPUT_VOLATILE = 0xe4,
OP_SGET_VOLATILE = 0xe5,
OP_SPUT_VOLATILE = 0xe6,
OP_IGET_OBJECT_VOLATILE = 0xe7,
OP_IGET_WIDE_VOLATILE = 0xe8,
OP_IPUT_WIDE_VOLATILE = 0xe9,
OP_SGET_WIDE_VOLATILE = 0xea,
OP_SPUT_WIDE_VOLATILE = 0xeb,
OP_BREAKPOINT = 0xec,
OP_BREAKPOINT = 0xec,
OP_IPUT_OBJECT_VOLATILE = 0xfc,
OP_SGET_OBJECT_VOLATILE = 0xfd,
OP_SPUT_OBJECT_VOLATILE = 0xfe,
如果给一款新的CPU移植DALVIK,从2.1到2.3的升级,即使不开JIT,上述14条解释器指令也需要相应进行优化。