Arabic subtitles

04-02 Memory,_GC,_and_Performance

04-02 Memory,_GC,_and_Performance

Get Embed Code
13 Languages

Showing Revision 5 created 01/09/2016 by QA_SP_1_AR.

  1. الآن وبما أنه تم تشغيل كل الكود
    بصورة سريعة ورائعة،
  2. دعونا نتحدث قليلا عن الذاكرة وكيف
    تؤثر على الأداء في نظامنا.
  3. العديد من لغات البرمجة المعروفة
    بكونها على مقربة من الأجهزة،
  4. أو بالأحرى، عالية الأداء، مثل
    C، C++، وفورتران،
  5. عادة يستخدمها ما المبرمجين
    لإدارة الذاكرة بأنفسهم.
  6. يعتبر المبرمجون على نحو فعال
    هم المسئولون عن تخصيص
  7. مجموعة من الذاكرة، وفي وقت
    ما في المستقبل انهاء التخصيص
  8. عند الانتهاء من استخدامها بالفعل.
  9. بما إنك تعرف متى ومقدار الذاكرة
    المخصصة في المساحة الفارغة،
  10. تتوقف الجودة الكاملة لإدارة
    الذاكرة على مهاراتك وفعاليتها.
  11. هذا يعتبر قدر كبير من المسئولية.
  12. في الواقع لا يعتبر المبرمجين
    دائما الأفضل في تتبع
  13. كل تلك الاجزاء والقطع من الذاكرة.
  14. لنفكر في ذلك،
    تعتبر عملية تطوير المنتجات عملية
  15. معقدة وسريعة وغالبا لا تحصل
    الذاكرة على مساحة فارغة بشكل صحيح
  16. تسمي هذه المجموعات من الذاكرة
    المحررة بتسريب الذاكرة، وهي توجد
  17. حول الموارد المصممة، والتي يمكنك
    استخدامها بشكل أفضل أو في مكان آخر.
  18. للحد من هذه الفوضى، والضغط،
    والخسائر الكبيرة في المال أحيانا
  19. الناتجة عن تسرب الذاكرة،
    يتم إنشاء لغات الذاكرة المدارة.
  20. يعود وقت تشغيل هذه اللغات
    لمخصصات تتبع الذاكرة
  21. وتحرر الذاكرة مرة أخرى للنظام
    عندما لا يكون هناك حاجة اليها
  22. بواسطة التطبيق نفسه، وكل ذلك دون
    أي تدخل من المبرمج.
  23. هذا الفن، أو بالأحرى العلم، من
    استعادة الذاكرة في بيئة الذاكرة
  24. المدارة يعرف بجمع البيانات عديمة
    النفع، تم استحداث هذا المفهوم
  25. من قبل جون مكارثي في عام ١٩٥٩ لحل
    المشاكل في لغة معالجة البرمجة.
  26. المبادئ الأساسية لجمع البيانات
    عديمة النفع هي كما يلي، الأول،
  27. ايجاد كائنات البيانات في البرنامج
    والتي لا يمكن الوصول إليها في المستقبل
  28. على سبيل المثال، أي ذاكرة لم يعد
    يتم الرجوع إليها بواسطة الكود.
  29. الثاني، استعادة الموارد
    المستخدمة من قبل هذه الكائنات.
  30. مفهوم بسيط من الناحية النظرية،
    ولكنه يصبح معقدا جدا بمجرد حصولك
  31. على مليوني خط من الكود
    وأربع جيجابايت بمقدار المخصصات.
  32. فكر بذلك، يمكن لجمع البيانات
    عديمة النفع أن تكون معقدة حقا،
  33. إذا حصلت على ٢٠٠٠٠ من المخصصات
    في البرنامج في الوقت الحالي.
  34. أي من تلك لم يعد هناك
    حاجة اليها بعد الآن؟
  35. أو الأفضل، متي ينبغي عليك تنفيذ
    حدث جمع البيانات عديمة النفع
  36. لإفراغ الذاكرة التي
    لم يتم استخدامها؟
  37. تعتبر هذه في الواقع
    أسئلة صعبة جدا،
  38. ولكن لقد كان لدينا ٥٠ سنة
    مهمة من الابتكار لتحسينهم،
  39. هذا هو السبب ان جامع البيانات
    عديمة النفع وقت تشغيل الاندرويد،
  40. هو أكثر تطورا من
    اقتراح مكارثي الأصلي.
  41. لقد تم انشاؤها لتكون سريعة
    وغير تداخلية بقدر الإمكان.
  42. يتم تقسيم الذاكرة التكويمية وقت
    تشغيل الاندوريد إلى مساحات،
  43. استنادا إلى نوع التخصيص
  44. وما هي أفضل طريقة يمكن للنظام
    تنظيم مخصصات أحداث GC المستقبلية.
  45. عندما يتم تخصيص كائن جديد،
  46. تؤخذ هذه الخصائص في الاعتبار
    لتناسب بشكل أفضل المساحات التي
  47. توضع فيها اعتمادا على وقت تشغيل
    اصدار الاندرويد الذي تستخدمه.
  48. وهذا هو الجزء المهم.
  49. كل مساحة لديها حجم محدد،
  50. عندما يتم تخصيص الكائنات، حيث
    نستمر في تتبع الأحجام المجتمعة
  51. عند بدء المساحة في النمو، سوف
    يحتاج النظام إلى تنفيذ حدث جمع
  52. البيانات عديمة النفع في محاولة
    لتحرير مخصصات الذاكرة المستقبلية
  53. انه يستحق إطلاق أحداث GC
    والتي ستبدو بشكل مختلف
  54. اعتمادا على وقت تشغيل
    الأندرويد الذي تستخدمه.
  55. مثلا، في Dalvik توقف العديد من
    أحداث GC الأحداث العالمية، يعني
  56. أن أي كود مدار وقت التشغيل
    سيتوقف حتى اكتمال العملية.
  57. والتي يمكن ان تكون معقدة، عندما
    تستغرق الGC وقتا أطول من المعتاد
  58. أو هناك مجموعة منها
    تحدث دفعة واحدة،
  59. عندما تلتهم الى حد كبير
    الإطار الزمني الخاص بك.
  60. ولكي تكون واضحا،
  61. قضى مهندسي الاندرويد الكثير من
    الوقت للتأكد من أن هذه الأحداث
  62. هي أسرع بقدر الإمكان للحد من
    الانقطاعات، وابعد قول ذلك،
  63. ما زالت تسبب بعض المشاكل في أداء
    التطبيقات في الكود الخاص بك.
  64. أولا، افهم أن قضاء تطبيقك مزيد
    من الوقت في القيام بحدث ال GC
  65. في إطار معين، يمنحها وقتا أقل
    بالنسبة للمنطق اللازم للحفاظ على بقاءك
  66. أقل من ١٦ ميلي ثانية
    في تصيير الحاجز.
  67. حتى إذا حصلت على كثير من الGC
    أو بعض من تلك التي تحدث مباشرة
  68. بعد بعضها البعض، فقد تضع وقت معالجة
    إطارك على أكثر من ١٦ ميلي ثانية
  69. لتصيير الحاجز، والذي يؤدي لربط
    مرئي أو التخلص منها للمستخدمين.
  70. ثانيا، افهم أن تدفق الكود يمكنه
    القيام بأنواع العمل التي تجبر
  71. الGC على الحدوث أكثر،
    أو استمرارها لفترة أطول من المعتاد.
  72. مثلا، إذا كنت تخصص مجموعة من
    الكائنات في الجزء الأكبر الداخلي
  73. لحلقة يتم تشغيلها لفترة طويلة،
    ستكون على وشك تلويث
  74. تكدس الذاكرة بالكثير من الأشياء
    وسينتهي بإنهاء الكثير من الGC
  75. بسرعة، نتيجة لضغط
    الذاكرة الإضافية هذه.
  76. على الرغم من أننا في
    بيئة الذاكرة المدارة،
  77. فلا يزال يمكن حدوث تسرب الذاكرة.
  78. على الرغم من انه ليس من السهل
    إنشاءها مثل اللغات الأخرى.
  79. يمكن لهذه التسربات تلويث حرارتك
    مع الكائنات التي لن يتم افراغها
  80. خلال حدث GC، والحد بفعالية من
    مقدار المساحة المستخدمة لديك
  81. واجبار إطلاق المزيد من أحداث GC
    بطريقة منتظمة نتيجة لذلك.
  82. هذه هي القصة،
  83. إذا كنت تريد تقليل مقدار أحداث
    GC التي تحدث في إطار معين،
  84. فأنت بحاجة إلى التركيز على
    تحسين استخدام الذاكرة لتطبيقاتك.
  85. من منظور الكود، قد يكون
    من الصعب تتبع من أين
  86. تأتي مثل هذه المشاكل،
  87. ولكن تملك اندرويد SDK مجموعة
    من الأدوات القوية تحت تصرفكم.
  88. دعونا نلقي نظرة.