1

jit テーブル構造を連鎖配列からハッシュ テーブルと B ツリーの組み合わせに変更することで、dalvik jit にいくつかの変更を加えました。サンプル Java プログラムを実行すると、

public class prog {
public static void main(String args[])
{
        long start=System.currentTimeMillis();
        int sum=0;
        for(int i=1;i<10;i++) 
        {
              for(int j=0;j<10;j++) {
                    long h=getKey();
                    System.out.println("key : "+h);
              }
        }
        System.out.println("time : "+(System.currentTimeMillis()-start));
}
public static long getKey()
{
    Random rand=new Random();
    long key = rand.nextLong();
    if(key<0)
        return -key;
    else
        return key;
}
}

dalvikvm -cp prog.jar prog を libdvm.so (JIT に変更を加えた後にビルド) を Android エミュレーターにプッシュした後に使用します。プログラムが完全に実行される場合もあれば、セグメンテーション違反が発生する場合もあります。ログを確認すると、次のエラーが表示されます。

Fatal signal 11 (SIGSEGV) at 0x00000020 (code=1)
I/DEBUG   (   33): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (   33): Build fingerprint: 'generic/sdk/generic:4.0.3/MR1/237985:eng/test-keys'
I/DEBUG   (   33): pid: 766, tid: 766  >>> dalvikvm <<<
I/DEBUG   (   33): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000020
I/DEBUG   (   33):  r0 00000020  r1 4245b32a  r2 0000001f  r3 00000001
I/DEBUG   (   33):  r4 4245b32a  r5 41af7e90  r6 0000f9a0  r7 0000063d
I/DEBUG   (   33):  r8 4001edc0  r9 00000000  10 40513620  fp 00000014
I/DEBUG   (   33):  ip 400bf108  sp beb6cad0  lr 00000000  pc 00000020  cpsr 20000010
I/DEBUG   (   33):  d0  3f4000003f400000  d1  0000000000000000
I/DEBUG   (   33):  d2  0000000000000000  d3  0000000000000000
I/DEBUG   (   33):  d4  0000000000000000  d5  41ca61a4d0800000
I/DEBUG   (   33):  d6  3f50624dd2f1a9fc  d7  3ede5bd843b4bb5d
I/DEBUG   (   33):  d8  0000000000000000  d9  0000000000000000
I/DEBUG   (   33):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   (   33):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   (   33):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   (   33):  scr 60000010
I/DEBUG   (   33): 
I/DEBUG   (   33):          #00  pc 00000020  
I/DEBUG   (   33):          #01  lr 00000000  <unknown>
I/DEBUG   (   33): 
I/DEBUG   (   33): code around pc:
I/DEBUG   (   33): 00000000 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000010 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000020 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000030 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000040 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 
I/DEBUG   (   33): code around lr:
I/DEBUG   (   33): 00000000 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000010 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000020 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000030 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 00000040 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   33): 
I/DEBUG   (   33): stack:
I/DEBUG   (   33):     beb6ca90  0000001f  
I/DEBUG   (   33):     beb6ca94  00000000  
I/DEBUG   (   33):     beb6ca98  00000000  
I/DEBUG   (   33):     beb6ca9c  400817ed  /system/lib/libdvm.so
I/DEBUG   (   33):     beb6caa0  400a4736  /system/lib/libdvm.so
I/DEBUG   (   33):     beb6caa4  00000001  
I/DEBUG   (   33):     beb6caa8  4245b32a  /system/framework/core.odex
I/DEBUG   (   33):     beb6caac  0000001f  
I/DEBUG   (   33):     beb6cab0  00000001  
I/DEBUG   (   33):     beb6cab4  4245b32a  /system/framework/core.odex
I/DEBUG   (   33):     beb6cab8  41af7e90  
I/DEBUG   (   33):     beb6cabc  0000f9a0  [heap]
I/DEBUG   (   33):     beb6cac0  0000063d  
I/DEBUG   (   33):     beb6cac4  40081841  /system/lib/libdvm.so
I/DEBUG   (   33):     beb6cac8  df0027ad  
I/DEBUG   (   33):     beb6cacc  00000000  
I/DEBUG   (   33): #00 beb6cad0  400b3f90  /system/lib/libdvm.so
I/DEBUG   (   33):     beb6cad4  0000f9a0  [heap]
I/DEBUG   (   33):     beb6cad8  400b3f90  /system/lib/libdvm.so
I/DEBUG   (   33):     beb6cadc  beb6cb08  [stack]
I/DEBUG   (   33):     beb6cae0  41b40710  /dev/ashmem/dalvik-LinearAlloc (deleted)
I/DEBUG   (   33):     beb6cae4  beb6cb4c  [stack]
I/DEBUG   (   33):     beb6cae8  00000000  
I/DEBUG   (   33):     beb6caec  fffffe60  
I/DEBUG   (   33):     beb6caf0  beb6cb98  [stack]
I/DEBUG   (   33):     beb6caf4  40034200  /system/lib/libdvm.so
I/DEBUG   (   33):     beb6caf8  00000000  
I/DEBUG   (   33):     beb6cafc  beb6cbc8  [stack]
I/DEBUG   (   33):     beb6cb00  00000000  
I/DEBUG   (   33):     beb6cb04  beb6cbd0  [stack]
I/DEBUG   (   33):     beb6cb08  00000000  
I/DEBUG   (   33):     beb6cb0c  00000000  
I/DEBUG   (   33):     beb6cb10  00000000  
I/DEBUG   (   33):     beb6cb14  00000000  
I/BootReceiver(   77): Copying /data/tombstones/tombstone_05 to DropBox (SYSTEM_TOMBSTONE)

考えられる問題は何ですか?メモリ関連の問題ですか、それとも JIT コードの変更に関するバグですか?

ありがとう

4

0 に答える 0