Performance and Memory Improvements in ART(Android O)

weixin_33670713發表於2017-05-25

1.記憶體方面的優化

  • 通過JIT profile在compile程式時將經常使用的method放在一個page裡(區域性性原理),程式載入時也只載入經常使用的部分
3061379-24d594be1914ae24.png
Paste_Image.png
  • New Garbage Collector

concurrently compact前臺和後臺程式,region based,GC開始時會暫停一段時間,決定回收哪個region(source region,根據fragment percentage決定),掃描完程式的thread stack之後,程式thread繼續執行。然後是copying phase,將reachable object 從source region拷貝到dest region,然後鎖住source region,進行回收(reclaim)。

3061379-decc11ecf7cc3fb3.png
Paste_Image.png

為了防止在拷貝過程中,程式執行緒訪問source region的object,由read barrier來攔截訪問,同時把訪問的object拷貝到dest region中,返回拷貝後的地址

3061379-1cc13dd835275ed3.png
Paste_Image.png

拷貝完成後,heap更加緊湊

3061379-f48c4900ed6888e2.png
Paste_Image.png

新的allocator

3061379-f01ad9b7849225c9.png
Paste_Image.png

2.Performance

  • Better inlining
3061379-2c51b723682fd752.png
Paste_Image.png
  • Code Sinking
3061379-419dcceec54ce3dc.png
Paste_Image.png
  • Class Hierarchy Analysis
3061379-13490c720f7c712e.png
Paste_Image.png
  • Loop Optimization
    找出Induction Variable
3061379-a671183338f7aaea.png
Paste_Image.png
3061379-fe04955925e29bb7.png
Paste_Image.png
3061379-3d3220b8c81e006d.png
Paste_Image.png
3061379-394e2eaa557bf3f7.png
Paste_Image.png
3061379-fc85187bacb05ae9.png
Paste_Image.png
3061379-78c00b4679ff8a42.png
Paste_Image.png

相關文章