Android 2.3のDalvikはコンカレントGC!!

API Level 9でデバッグしていたら、以下のようなログが目に飛び込んできた。

12-10 12:16:50.623: DEBUG/dalvikvm(949): GC_CONCURRENT freed 479K, 50% free 3144K/6279K, external 1204K/1591K, paused 4ms+5ms
12-10 12:16:50.681: INFO/dalvikvm(949): Jit: resizing JitTable from 512 to 1024

おいおい、コンカレントGCなんて何時サポートしていたんだ!?

Android 2.3 Platform Highlights

[Dalvik runtime]

  • Dalvik VM:
    • コンカレントガベージコレクタサポート (3ms以下の停止が目標らしいが上記ログでは達成できてない)
    • 更に最適化されたJIT
    • 改善されたコードベリフィケーション
    • 性能とメモリの問題に対処するストリクトモードデバッグ
  • Core libraries:
    • 拡張されたI18Nサポート(全世界のエンコーディングとより多くのロケール)
    • より速い数値のフォーマット。例) float型は従来より2.5倍速くなった
    • HTTPレスポンスはgzip圧縮がデフォルトとなる。これによりXMLとJSON APIでのレスポンスのサイズは60%以下のサイズに抑制されている
    • 新しいコレクションとユーティリティAPI
    • 改良されたネットワークAPI
    • 改良されたファイル読み書きと制御
    • JDBCを更新
  • Updates from upstream projects:
    • OpenSSL 1.0.0aをサポート
    • BouncyCastle 1.45をサポート
    • ICU 4.4をサポート
    • zlib 1.2.5をサポート

なるほどしっかり書いてあった。
コンカレントGCが実装されたということは近いうちに登場するマルチコアCPUを見越してのことだろうか。これまではDalvikはJVM1.2か1.3相当だと思っていたが、これでJVM1.4と同等になったと見てよいだろう。

私はWindowsで開発をしているが2.3になってから明らかにエミュレータの動作が緩慢になったと感じている。これは上記コンカレントGCをサポートしたことと無関係ではあるまい。(一般的にコンカレントGCはメインスレッドと並行してGCスレッドを動かすためシステムの応答に直接響く)

...取りあえずデバッグでは止めたいな。