Chinese, Traditional subtitles

← 04-02 Memory,_GC,_and_Performance

04-02 Memory,_GC,_and_Performance

Get Embed Code
13 Languages

Showing Revision 5 created 01/26/2016 by sp16.

  1. 并非所有指令都执行得既快又棒
  2. 下面介紹內存及牠如何影響系統運行
  3. 普遍認為多數程式語言接近硬體或高性能
  4. 如C語言 C++語言
  5. 和Fortran 通常程式設計師自己管理內存
  6. 高手設計師對內存的分配
  7. 會慎重處理
  8. 并在未來結束使用時再次分配
  9. 一旦確認何時及如何分配可用內存
  10. 內存管理的品質就仰賴於設計師的技能跟效率
  11. 責任重大啊
  12. 實際情形是設計師們并不都會
  13. 追蹤那些零碎的內存碎片
  14. 程式開發是件混亂又瘋狂的過程
  15. 內存通常都沒辦法完全被釋放
  16. 這些被囚禁的內存塊叫內存漏洞
  17. 侵佔了大量資源 這些資源其實可以被更好地利用
  18. 為減少內存漏洞引起的混亂 負擔 甚至資金損失
  19. 便設計了內存管理語言
  20. 這些語言在運行時跟蹤內存分配及
  21. 當程式不再需要時釋放系統內存
  22. 完全不需要設計師的介入
  23. 這項內存回收的藝術或科學在內存管理環境下叫作碎片帳集
  24. 這個設計理念是在1959年
  25. 由John McCarthy發明的 當初是為了解決lisp語言的問題
  26. 碎片帳集的基本理念有:
  27. 第一找到未來無法存取的數據
  28. 如所有不受指令操控的內存
  29. 第二,回收被利用過的資源
  30. 原理簡單 但是2百萬行編碼
  31. 跟4gigs的分配在實際操作時卻異常復雜
  32. 如果目前在程式中有20000個分配
  33. 碎片帳集定會令人很困惑
  34. 哪一個是沒用的?
  35. 或者
  36. 何時啟動碎片帳集釋放內存?
  37. 這些問題其實很復雜
  38. 好在50年來我們找到了解決問題的方法
  39. 就是Android Runtime中的碎片帳集
  40. 比MacCarthy最初的方法更高級
  41. 速度快且是非侵入性的
  42. 經由分配類型
  43. 及系統如何有效地組織分配以利GC的運行
  44. 并作為新的配置
  45. 所有影響androids runtimes的內存堆都被分割到空間中
  46. 根據這些特點 那些數據最適合放到什么空間
  47. 取決於使用那個Android版本
  48. 最重要的一點是
  49. 每個空間都有預設的大小
  50. 目標在被分配時, 要跟蹤綜合大小
  51. 且空間不斷擴大 系統需要執行碎片帳集
  52. 以確保內存分配的正常運行
  53. 值得一提的是使用不同的Android runtime
  54. GC的運行方式就會不同
  55. 例如在Dalvik中很多GC是停止世界事件
  56. 意思是很多指令的運行直到操作完成才會停止
  57. 當這些GCs所用時間超過一般值
  58. 或者一大堆一起執行會耗費龐大的幀象時間
  59. 這是很麻煩的事情
  60. 坦白講
  61. Android設計師花費了大量時間降低干擾
  62. 確保這些程式以最快的速度運行
  63. 話雖如 在指令中影響程式執行的問題仍然存在
  64. 首先程式在任意幀內執行GCs所需的時間越多
  65. 消除少於16毫秒的呈現障礙
  66. 所需的合理時間就會變少
  67. 如果有許多GCs或是一大串指令一個接一個地操作
  68. 幀象時間很有可能會超過16毫秒的呈現障礙
  69. 這會導致隱形的碰撞或閃躲
  70. 其次,指令流程可能造成GCs強制執行的次數增多
  71. 或者執行時間超過正常值
  72. 例如在一個長期運行的循環最內側分配囤積對象
  73. 很多數據就會污染內存堆
  74. 馬上就會有許多GCs啟動
  75. 由於這一額外的內存壓力
  76. 盡管內存環境管理良好
  77. 就算是比其他語言復雜
  78. 內存漏洞仍會發生
  79. 這些漏洞在GCs啟動時透過無法被釋放的數據污染內存堆
  80. 嚴重降低可用空間的總量
  81. 并以常規的方式強制GC的執行
  82. 就是這樣
  83. 如果要減少任意幀內啟動GC的次數
  84. 需要著重優化程式的內存使用量
  85. 從指令的角度看或許很難追蹤這些問題的起因
  86. 但是
  87. 幸好Android SDK擁有一組有效的工具
  88. 任君支配