본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android] ART vs. Dalvik

by 돼지왕 왕돼지 2018. 10. 11.
반응형

[Android] ART vs. Dalvik


https://source.android.com/devices/tech/dalvik/

ahead of time, android art vs dalivk, AOT, aot complie, app performance, art vs dalvik, breakpoint, compiled app executable, concurrent gc, crash report, dex2oat, diagnostic detail, event filter, field watchpoint, gc pause, gc pause and concurrent, gc 기능 향상, GC_FOR_ALLOC, install time, kitkat, live instance, LOCK, lock thread jump, Memory compacting, method-exit event, Sampling profiler, stack trace, traceview, [Android] ART vs. Dalvik, 개발과 디버깅 향상


Ahead-of-time ( AOT ) compilation


-

ART 는 AOT compile 을 제공한다. 이는 install-time 은 더 오래 걸리지만, app 자체의 performance 는 더 향상된다.

Install time 에 ART 는 app 을 on-device dex2oat tool 을 이용해 compile 한다.

이 dex2oat 는 DEX 파일을 input 으로 받아서 target device 에 맞는 compiled app executable 을 생성해낸다.

( ART 이전에 개발된 앱들은 문제가 생길 수 있다. https://developer.android.com/guide/practices/verifying-apps-art.html )





GC 기능 향상


-

GC pause 가 2번에서 1번으로 줄음

GC pause 타임에 몇몇 작업은 concurrent 하게 돌 수 있음

Recently-allocated objects 나 short-lived objects 를 정리할 때는 더 성능이 좋다.

Concurrent GC 를 좀 더 자주 수행해서 GC_FOR_ALLOC 이 불리는 경우를 거의 없게 만들었다.

Memory compacting 을 제공한다.





개발과 디버깅 향상


Sampling profiler 제공

    Traceview tool 을 사용할 때 runtime performance 에 영향을 받았다.

    ART 는 sampling profiler 를 제공해서 앱 성능 저하를 줄이면서 필요한 정보를 보게 했다. Kitkat 부터 사용 가능하다.




Debugging features

    stack trace 에서 어떤 lock 이 쓰였는지 볼 수 있고, lock 을 잡고 있는 thread 로 jump 할 수 있다.

    지정한 class 에 대해 얼마나 많은 live instance 를 가지고 있는지 알 수 있고, 그것들을 볼수도 있고, 누가 그것을 참조하고 있는지도 볼 수 있다.

    event filter( breakpoint 처럼 ) 를 할 수 있다. 

    method-exit event 를 이용해서 method return value 를 볼 수 있다.

    field watchpoint 를 통해 특정 field 값의 get/set 에 대해 detect 할 수 있다.




향상된 exception, crash report 의 diagnostic detail 

    ClassCastException, ClassNotFoundException, NullPointerException 에 대해 더 자세한 정보를 제공한다.

<Prev>

java.lang.NullPointerException: Attempt to write to field 'int

android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object

reference


<ART>

java.lang.NullPointerException: Attempt to invoke virtual method

'java.lang.String java.lang.Object.toString()' on a null object reference




기타


-

JNI issue 외에는 크게 report 된 이슈가 없다. 있다면 아래로 신고하면 된다.

https://source.android.com/source/report-bugs#platform





반응형

댓글