38. 전 계층을 다 모니터링 해야 한다.
CPU & GPU Memory NetworkStorage
Method Trace
Layout (60fps)
Wake Locks
Over Draws
Animations
Job Schedulers..
GC
Object Allocations
Caching
Background/Foregrou
nd Policy
BITMAP
Optimization..
Batch
(Job Scheduler)
Pre Patching
Data Compression
Response Time
Traffic, Packet, Error,
Dropped In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed
41. 개발 편의성/ 관리를 위해 직접 메모리를 관리하고 싶지만..
Java에서는
C, C++에서 사용하는 ‘free’, ‘delete’가 없기 때문에
주기적으로 혹은 특정 조건일 때 GC를 하게 됩니다.
이로인해 프로그래머는 메모리 관리에 대해서 고민을 적게 할 수 있습니다.
하지만 임베디드 환경에서는 메모리 하나 하나가 매우 소중합니다.
43. 기본적으로 할당하는 방식은
Strong Reference 입니다.
Strong
- 기본적으로 할당하는 방식을 Strong Reference 라고 부릅니다.
mLauncher = new <Launcher>(launcher);
- GC과정에서 연결된 객체들을 Mark하고 Mark되지 않은 객체들을 Sweep합니다.
44. Strong 이외에 3가지가 더 있습니다.
1. 종류
Soft reference, Weak reference, Phantom reference
Private WeakReference<Launcher> mLauncher;
mLauncher = new WeakReference<Launcher>(launcher);
2. 원리
- GC동작에서 Strong이 아닌 경우 Mark하지 않고
Reference Queue라는 공간에 객체를 넣고,
Sweep하는 과정에서 제거 Queue에 있는 객체들을 제거 합니다.
45. 더 자세히 보겠습니다.
1. Soft reference
Mark가 되기도 하고 Reference Queue에 담기기도 합니다.
Soft reference로 참조된 객체는 메모리가 절대적으로 부족한 상황이 되기전에는 참조가 유지됩니다.
각 앱마다 할당된 메모리가 절대적을 부족할 때 Soft이면 제거, 여유롭다면 Strong과 같이 제거하지 않습니다.
2. Weak reference
Referene Queue에 담깁니다.
Weak reference로 참조된 객체는 Soft Reference보다 더 약한 연결고리를 가집니다.
메모리의 상태와 관계없이 GC가 동작되는 순간 Marked Object라도 회수됩니다.
Strong Soft
Weak
Phantom
Mark
Reference Queue
48. Rosalloc 이란
(Runs of Slots Allocator)
작은 객체들을 위한
thread local storage를 만들자.
Bulk free를 위하여.
작은 객체를 할당하는 영역과
큰 객체를 할당하는 영역을 구분하자
하나의 영역에 객체를 할당하니,
GC가 빈번하게 발생해서,
역할을 나누자!
52. 추가적인 기교들을 더함.
• Dalvik이 두번 Pause(mark remark) 해서 객체 mark-sweep 함
• ART에서는 한번 pause(mark를 병렬로 진행 remark에서만 멈춤).
• 그래도 mark-sweep은 느리니 병렬로 해서 빠르게 정리하자.
• 최근 생성(sticky)하거나, 짧은 수명의 객체는 빨리 제거하자.
• 메모리가 부족해 GC를 돌리면 OOM이 날수 있으니, 더 낮은 상한성 (GC Timelier) 만
들어서 돌리자.
53. Android L부터 GC 전략 추가
• CMS (기본전략)
• Mark-Sweep 전략을 유지하되 성능을 향상 시키는 방법
• Mark-Sweep 의 느린 속도를 해결하기 위해 병렬, 부분, 이전 세대에만 생성된 것을 제
거하는 방식 등이 종합적으로 적용함.
• SS : Semi Space (aka From Space To Space)
• 빠른 GC 방법 / 단 메모리는 많이 사용하는 방법 -> 단 첫 GC의 정확도는 Mark-Sweep
보다 낮은 문제가 있음.
• 2개의 Semi Space 를 만들어서 정리하는 방법
• GSS : Generation Semi Space
• Semi Space를 세대별로 하는 방법.
61. 왜 Foreground / Background GC
로 나누었을까?
Foreground GC (화면 담당)
Background GC (백드라운드 담당)
• Foreground GC -> CMS (파편화보다 빠른 정리)
빠르게 정리되는 것이 중요. 화면이 빈번하게 변경되므로
생명 주기가 긴 객체가 없다. 파편화 이슈보다 빠르게 정
리가 중요 (화면은 자주 갱신되니)
• Background GC (생명주기 긴 객체 -> 파편화)
항상 메모리에서 떠 있는 녀석들이 많다. 그만큼 생명주기
도 기니까 파편화가 많이 발생할수 있음. 속도보다는
memory compact 하는 녀석을 선택하는 것이 좋음.
64. Background gctype 은 언제든지 변경
(기본 gc 설정은 제조사 마음)
• To disable background compaction do:
• adb shell setprop dalvik.vm.backgroundgctype CMS
• To enable:
• adb shell setprop dalvik.vm.backgroundgctype SS
65. MemFree vs MemoryAvailable.
cat /proc/meminfoOS 메모리 정보는
MemFree보다
MemAvailable을 이용하세요.
MemFree:
The amount of physical RAM, in kilobytes,
left unused by the system.
MemAvailable:
An estimate of how much memory is available
for starting new application
70. Android 3.0 이후 HW Acceleration 도
입
https://developer.android.com/guide/topics/graphics/hardware-accel.html
http://blog.danlew.net/2015/10/20/using-hardware-layers-to-improve-animation-performance/
71. Android 5.0 이후 material design 도
입
Material 의 animation 효과 어떻게 하지?
자 그럼 이제 GPU를 사용해 CPU 부하 줄이자 (RenderThread도입)
77. 시사점..
CPU Governor 정책에 의해.
CPU가 뜨거워지면 -> 절전 모드로..
밧데리를 아끼기 위해 일이 없으면 -> 천천히 돌아가게..
개발자 입장에서는 내 앱이 최적의 상황에서만. 돌길 바랄뿐.
*cpu/gpu governor 정리자료
http://ajgupta.github.io/android/2015/01/28/CPU-and-
GPU-governors/
84. 시사점..
Database, File I/O Benchmark Test의 의미가 무색..
하나의 디바이스에서 매겨진 랭킹이.
다른 디바이스에서 동일하다는 보장이 없다..
또한 나의 앱이 IO를 쓸따 다른 앱이 IO를 안쓴다는 보
장도 없다..
직접 case by case 다 보셔야 한다.. (정말 가능?)
85. 또 하나의 변수 .. Wear Leveling (웨
어 레벨링)
Wear Leveling 전 Wear Leveling 후
86. 시사점..
화면을 16ms 안에 못 그려졌다면. 누구 책임인가?
데이터 읽기 / 쓰기 속도가 뒤죽 박죽 이라면 누구 책
임인가?
앱 개발자가 해결할수 있는 문제인가?..
89. 밧데리의 수명은 제한적
제조사의 고민
• 오래 사용하기 위해 전력 소비량을 낮추던가?
• 동일한 전력을 계속 공급해 성능은 유지하지만,
2,3시간 만에 방전 되던가?
90. 복잡한 다계층 시스템에 대해서 다시 생각해 보자.
CPU & GPU Memory NetworkStorage
Method Trace
Layout (60fps)
Wake Locks
Over Draws
Animations
Job Schedulers..
GC
Object Allocations
Caching
Background/Foregrou
nd Policy
BITMAP
Optimization..
Batch
(Job Scheduler)
Pre Patching
Data Compression
Response Time
Traffic, Packet, Error,
Dropped In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed
91. 복잡한 다계층 시스템에 대해서 다시 생각해 보자.
CPU & GPU Memory NetworkStorage
UI Rendering Time
(Native, Web)
Event
GC Pause Time
Memory Allocation
Wear Level
HTTP Response Time
Traffic In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed