Return to Video

04-02 Memory,_GC,_and_Performance

  • 0:00 - 0:03
    الآن وبما أنه تم تشغيل كل الكود
    بصورة سريعة ورائعة،
  • 0:03 - 0:08
    دعونا نتحدث قليلا عن الذاكرة وكيف
    تؤثر على الأداء في نظامنا.
  • 0:08 - 0:12
    العديد من لغات البرمجة المعروفة
    بكونها على مقربة من الأجهزة،
  • 0:12 - 0:14
    أو بالأحرى، عالية الأداء، مثل
    C، C++، وفورتران،
  • 0:14 - 0:18
    عادة يستخدمها ما المبرمجين
    لإدارة الذاكرة بأنفسهم.
  • 0:18 - 0:21
    يعتبر المبرمجون على نحو فعال
    هم المسئولون عن تخصيص
  • 0:21 - 0:25
    مجموعة من الذاكرة، وفي وقت
    ما في المستقبل انهاء التخصيص
  • 0:25 - 0:26
    عند الانتهاء من استخدامها بالفعل.
  • 0:26 - 0:31
    بما إنك تعرف متى ومقدار الذاكرة
    المخصصة في المساحة الفارغة،
  • 0:31 - 0:35
    تتوقف الجودة الكاملة لإدارة
    الذاكرة على مهاراتك وفعاليتها.
  • 0:35 - 0:37
    هذا يعتبر قدر كبير من المسئولية.
  • 0:37 - 0:40
    في الواقع لا يعتبر المبرمجين
    دائما الأفضل في تتبع
  • 0:40 - 0:42
    كل تلك الاجزاء والقطع من الذاكرة.
  • 0:42 - 0:45
    لنفكر في ذلك،
    تعتبر عملية تطوير المنتجات عملية
  • 0:45 - 0:49
    معقدة وسريعة وغالبا لا تحصل
    الذاكرة على مساحة فارغة بشكل صحيح
  • 0:49 - 0:53
    تسمي هذه المجموعات من الذاكرة
    المحررة بتسريب الذاكرة، وهي توجد
  • 0:53 - 0:58
    حول الموارد المصممة، والتي يمكنك
    استخدامها بشكل أفضل أو في مكان آخر.
  • 0:58 - 1:01
    للحد من هذه الفوضى، والضغط،
    والخسائر الكبيرة في المال أحيانا
  • 1:01 - 1:05
    الناتجة عن تسرب الذاكرة،
    يتم إنشاء لغات الذاكرة المدارة.
  • 1:05 - 1:09
    يعود وقت تشغيل هذه اللغات
    لمخصصات تتبع الذاكرة
  • 1:09 - 1:12
    وتحرر الذاكرة مرة أخرى للنظام
    عندما لا يكون هناك حاجة اليها
  • 1:12 - 1:16
    بواسطة التطبيق نفسه، وكل ذلك دون
    أي تدخل من المبرمج.
  • 1:16 - 1:20
    هذا الفن، أو بالأحرى العلم، من
    استعادة الذاكرة في بيئة الذاكرة
  • 1:20 - 1:24
    المدارة يعرف بجمع البيانات عديمة
    النفع، تم استحداث هذا المفهوم
  • 1:24 - 1:30
    من قبل جون مكارثي في عام ١٩٥٩ لحل
    المشاكل في لغة معالجة البرمجة.
  • 1:30 - 1:33
    المبادئ الأساسية لجمع البيانات
    عديمة النفع هي كما يلي، الأول،
  • 1:33 - 1:37
    ايجاد كائنات البيانات في البرنامج
    والتي لا يمكن الوصول إليها في المستقبل
  • 1:37 - 1:40
    على سبيل المثال، أي ذاكرة لم يعد
    يتم الرجوع إليها بواسطة الكود.
  • 1:40 - 1:44
    الثاني، استعادة الموارد
    المستخدمة من قبل هذه الكائنات.
  • 1:44 - 1:47
    مفهوم بسيط من الناحية النظرية،
    ولكنه يصبح معقدا جدا بمجرد حصولك
  • 1:47 - 1:51
    على مليوني خط من الكود
    وأربع جيجابايت بمقدار المخصصات.
  • 1:51 - 1:54
    فكر بذلك، يمكن لجمع البيانات
    عديمة النفع أن تكون معقدة حقا،
  • 1:54 - 1:57
    إذا حصلت على ٢٠٠٠٠ من المخصصات
    في البرنامج في الوقت الحالي.
  • 1:57 - 1:59
    أي من تلك لم يعد هناك
    حاجة اليها بعد الآن؟
  • 1:59 - 2:02
    أو الأفضل، متي ينبغي عليك تنفيذ
    حدث جمع البيانات عديمة النفع
  • 2:02 - 2:04
    لإفراغ الذاكرة التي
    لم يتم استخدامها؟
  • 2:04 - 2:06
    تعتبر هذه في الواقع
    أسئلة صعبة جدا،
  • 2:06 - 2:10
    ولكن لقد كان لدينا ٥٠ سنة
    مهمة من الابتكار لتحسينهم،
  • 2:10 - 2:13
    هذا هو السبب ان جامع البيانات
    عديمة النفع وقت تشغيل الاندرويد،
  • 2:13 - 2:15
    هو أكثر تطورا من
    اقتراح مكارثي الأصلي.
  • 2:15 - 2:19
    لقد تم انشاؤها لتكون سريعة
    وغير تداخلية بقدر الإمكان.
  • 2:19 - 2:23
    يتم تقسيم الذاكرة التكويمية وقت
    تشغيل الاندوريد إلى مساحات،
  • 2:23 - 2:24
    استنادا إلى نوع التخصيص
  • 2:24 - 2:28
    وما هي أفضل طريقة يمكن للنظام
    تنظيم مخصصات أحداث GC المستقبلية.
  • 2:28 - 2:30
    عندما يتم تخصيص كائن جديد،
  • 2:30 - 2:33
    تؤخذ هذه الخصائص في الاعتبار
    لتناسب بشكل أفضل المساحات التي
  • 2:33 - 2:37
    توضع فيها اعتمادا على وقت تشغيل
    اصدار الاندرويد الذي تستخدمه.
  • 2:37 - 2:39
    وهذا هو الجزء المهم.
  • 2:39 - 2:41
    كل مساحة لديها حجم محدد،
  • 2:41 - 2:44
    عندما يتم تخصيص الكائنات، حيث
    نستمر في تتبع الأحجام المجتمعة
  • 2:44 - 2:47
    عند بدء المساحة في النمو، سوف
    يحتاج النظام إلى تنفيذ حدث جمع
  • 2:47 - 2:52
    البيانات عديمة النفع في محاولة
    لتحرير مخصصات الذاكرة المستقبلية
  • 2:52 - 2:54
    انه يستحق إطلاق أحداث GC
    والتي ستبدو بشكل مختلف
  • 2:54 - 2:57
    اعتمادا على وقت تشغيل
    الأندرويد الذي تستخدمه.
  • 2:57 - 3:01
    مثلا، في Dalvik توقف العديد من
    أحداث GC الأحداث العالمية، يعني
  • 3:01 - 3:05
    أن أي كود مدار وقت التشغيل
    سيتوقف حتى اكتمال العملية.
  • 3:05 - 3:09
    والتي يمكن ان تكون معقدة، عندما
    تستغرق الGC وقتا أطول من المعتاد
  • 3:09 - 3:11
    أو هناك مجموعة منها
    تحدث دفعة واحدة،
  • 3:11 - 3:14
    عندما تلتهم الى حد كبير
    الإطار الزمني الخاص بك.
  • 3:14 - 3:15
    ولكي تكون واضحا،
  • 3:15 - 3:18
    قضى مهندسي الاندرويد الكثير من
    الوقت للتأكد من أن هذه الأحداث
  • 3:18 - 3:21
    هي أسرع بقدر الإمكان للحد من
    الانقطاعات، وابعد قول ذلك،
  • 3:21 - 3:25
    ما زالت تسبب بعض المشاكل في أداء
    التطبيقات في الكود الخاص بك.
  • 3:25 - 3:29
    أولا، افهم أن قضاء تطبيقك مزيد
    من الوقت في القيام بحدث ال GC
  • 3:29 - 3:33
    في إطار معين، يمنحها وقتا أقل
    بالنسبة للمنطق اللازم للحفاظ على بقاءك
  • 3:33 - 3:35
    أقل من ١٦ ميلي ثانية
    في تصيير الحاجز.
  • 3:35 - 3:38
    حتى إذا حصلت على كثير من الGC
    أو بعض من تلك التي تحدث مباشرة
  • 3:38 - 3:42
    بعد بعضها البعض، فقد تضع وقت معالجة
    إطارك على أكثر من ١٦ ميلي ثانية
  • 3:42 - 3:47
    لتصيير الحاجز، والذي يؤدي لربط
    مرئي أو التخلص منها للمستخدمين.
  • 3:47 - 3:50
    ثانيا، افهم أن تدفق الكود يمكنه
    القيام بأنواع العمل التي تجبر
  • 3:50 - 3:55
    الGC على الحدوث أكثر،
    أو استمرارها لفترة أطول من المعتاد.
  • 3:55 - 3:59
    مثلا، إذا كنت تخصص مجموعة من
    الكائنات في الجزء الأكبر الداخلي
  • 3:59 - 4:02
    لحلقة يتم تشغيلها لفترة طويلة،
    ستكون على وشك تلويث
  • 4:02 - 4:06
    تكدس الذاكرة بالكثير من الأشياء
    وسينتهي بإنهاء الكثير من الGC
  • 4:06 - 4:09
    بسرعة، نتيجة لضغط
    الذاكرة الإضافية هذه.
  • 4:09 - 4:12
    على الرغم من أننا في
    بيئة الذاكرة المدارة،
  • 4:12 - 4:14
    فلا يزال يمكن حدوث تسرب الذاكرة.
  • 4:14 - 4:17
    على الرغم من انه ليس من السهل
    إنشاءها مثل اللغات الأخرى.
  • 4:17 - 4:20
    يمكن لهذه التسربات تلويث حرارتك
    مع الكائنات التي لن يتم افراغها
  • 4:20 - 4:24
    خلال حدث GC، والحد بفعالية من
    مقدار المساحة المستخدمة لديك
  • 4:24 - 4:27
    واجبار إطلاق المزيد من أحداث GC
    بطريقة منتظمة نتيجة لذلك.
  • 4:27 - 4:29
    هذه هي القصة،
  • 4:29 - 4:33
    إذا كنت تريد تقليل مقدار أحداث
    GC التي تحدث في إطار معين،
  • 4:33 - 4:36
    فأنت بحاجة إلى التركيز على
    تحسين استخدام الذاكرة لتطبيقاتك.
  • 4:36 - 4:39
    من منظور الكود، قد يكون
    من الصعب تتبع من أين
  • 4:39 - 4:41
    تأتي مثل هذه المشاكل،
  • 4:41 - 4:45
    ولكن تملك اندرويد SDK مجموعة
    من الأدوات القوية تحت تصرفكم.
  • 4:45 - 4:46
    دعونا نلقي نظرة.
Title:
04-02 Memory,_GC,_and_Performance
Description:

04-02 Memory,_GC,_and_Performance

more » « less
Video Language:
English
Team:
Udacity
Project:
ud825 - Android Performance
Duration:
04:47

Arabic subtitles

Revisions Compare revisions