38
빨라진 Android N GDE Android TossLab Android Developer 블로그 : https://medium.com/@jsuch2362

더 빨라진 Android n

Embed Size (px)

Citation preview

Page 1: 더 빨라진 Android n

더 빨라진 Android N

GDE AndroidTossLab Android Developer블로그 : https://medium.com/@jsuch2362

Page 2: 더 빨라진 Android n

더 빨라진 Android N

앱 실행/동작이 더 빨라짐

시스템 업데이트가 더 빨라짐

Page 3: 더 빨라진 Android n

왜?어떻게?

Page 4: 더 빨라진 Android n

AOT JIT

AOT 에 JIT 를 더하다

Page 5: 더 빨라진 Android n

여기서 잠깐AOT?JIT?

Page 6: 더 빨라진 Android n

AOT? JIT?

JIT : 안드로이드 프로요 부터 추가 됨 - Just In Time Compiling - Class 파일을 실행 시점에 해당 시스템에 적합하게 변환

AOT : 안드로이드 L 부터 추가 (L 에서는 expremental) - Ahead Of Time Compiling - 설치 되는 시점에 시스템에 적합하게 변환

Page 7: 더 빨라진 Android n

앱 실행AOT >>> JIT

Page 8: 더 빨라진 Android n

Nougat 은 왜 JIT 로 돌아왔나?

Page 9: 더 빨라진 Android n

AOT 와 JIT 비교

Page 10: 더 빨라진 Android n

AOT 의 약점

OS 업데이트 전략 변경

- 2015 년 부터 Secure 패치로 분기에 2~3회 가량 OS 업데이트- AOT 환경은 모든 Application 의 업데이트 요구

설치 시간, 공간 점유, 배터리에 취약

Page 11: 더 빨라진 Android n

JIT 는 약점이 없나?

Page 12: 더 빨라진 Android n

앱 동작이 느리다.

Page 13: 더 빨라진 Android n

설치를 위해 동작을 포기한다??

Page 14: 더 빨라진 Android n

Nougat 은 어떻게 더 빨라졌나?

Page 15: 더 빨라진 Android n

Welcome back, JIT

실제론 더 빨라졌다.

- 앱 실행 - M 대비 3배 더 빨라짐- JIT Compiling 을 Background 로 전환- 자주 쓰는 기능(Hot Method) 에 대해서만 Compiling - GC 대상에 대한 캐시

Page 16: 더 빨라진 Android n

앱 첫 실행시

첫 실행은 JIT 기반

사용자의 앱 사용을 Profiling

Profiling 기반으로 컴파일

다음 실행에 컴파일된 정보로 앱 실행

Page 17: 더 빨라진 Android n

최적화 후 실행

컴파일된 앱은 AOT + JIT 혼합 상태

사용자의 앱 사용을 Profiling

Profiling 기반으로 컴파일

컴파일 결과물로 앱 실행

계속적으로 반복

Page 18: 더 빨라진 Android n

여전히 의문

동작은 빨라졌으나최초 실행은 여전히 “?”

Page 19: 더 빨라진 Android n

JIT Compilation 의 변화

Page 20: 더 빨라진 Android n

기존 JIT

APK 압축 해제 시간

JIT Compilation

Page 21: 더 빨라진 Android n

Nougat 의 JIT

APK 는 설치 시점에 압축 해제최초 실행에 관련된 class 먼저 loading 후 전달. 나머진 Background 에서 처리

Page 22: 더 빨라진 Android n

JIT vs AOT vs JIT+AOT

AOT 만큼은 아니나 JIT + AOT 는 근접한 성능을 보임

Page 23: 더 빨라진 Android n

JIT Compilation 의 Background 이점

UI Thread 동작에 더 많은 여유를 줌으로써 사용감을 더 좋게 함Android M 과 N -> 4% 프레임 드랍기존 JIT -> 20% 프레임 드랍

Page 24: 더 빨라진 Android n

Profiling Guided Compilation 으로 인해 JIT 이 비해CPU 사용율이 낮아짐

배터리 가용성 증가

Page 25: 더 빨라진 Android n

Profiling Guided Compilation

Page 26: 더 빨라진 Android n

프로파일 대상

Hot Method

Impact Startup

Share Library

자주 실행하는 메소드

실행과 관련된 클래스

외부에서 요청에 의한 동작

Page 27: 더 빨라진 Android n

AOT 컴파일 데몬 로직

Page 28: 더 빨라진 Android n

Profile Guided Compilation 의 이점

최적화 되지 않은 부분만 최적화

- JIT 에 의해 소모 되는 부분 최소화- 배터리 절약

최소한으로만 AOT 코드 생성

- 저장공간 절약

Page 29: 더 빨라진 Android n

설치 공간 점유 비교

Android M 대비 50% 절약

Page 30: 더 빨라진 Android n

Application Image

Page 31: 더 빨라진 Android n

Application Image 생성

초기 실행에 관련된 부분을 이미지로 저장

Page 32: 더 빨라진 Android n

Application Image 동작

앱이 실행 되면 이미지를 불러와 메모리에 추가

Page 33: 더 빨라진 Android n

Profile + Image 는 5~10% 더 빠름

Page 34: 더 빨라진 Android n

GC 의 동작 개선Object Allocation 동작 개선

Page 35: 더 빨라진 Android n

정리

Page 36: 더 빨라진 Android n

Nougat 의 변화

빨라진 컴파일러와 인터프리터

JIT 컴파일러 추가

Profile Guided 컴파일

Application Image

더 빨라진 Object Allocation

Page 37: 더 빨라진 Android n

One more Thing

Page 38: 더 빨라진 Android n

Q & A

앱이 업데이트 되면 Optimized Code 는?

- 삭제 됨. 설치되면 Empty Profile 상태- 빈번한 업데이트에는 영향이 간다. 고려해야 한다.

Hot Method 기준은?

- Key Matrix 가 존재하며 AOSP 코드를 봐달라