android2.3中dalvik分析(较android2.1)

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条解释器指令也需要相应进行优化。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值