مقدمة
في الآونة الأخيرة ، أضفنا استراتيجية تخفيض إلى مكون Fuse (لا يبدو أن Hystrix لديه هذا التكوين) ، ونحن نقدم الاستراتيجيات التالية:
1. السياسة الافتراضية
2. إرجاع قيمة ثابتة
3. رمي استثناء محدد
4. تنفيذ نص رائع
بالطبع ، يمكن تكوين هذه التكوينات على النظام الأساسي وتصبح مفيدة على الفور.
التنفيذ الحالي لإرجاع القيم الثابتة هو كما يلي:
لقد وجدت اليوم أنه إذا تم إرجاع نفس الكائن في كل مرة ، وهذا المنطق هو مربع أسود للشركة (لا يعرف العمل أن الكائن الذي تم الحصول عليه في كل مرة هو نفسه) ، إذا تم تشغيل الكائن ، فسيؤثر بالتأكيد على الطلبات الأخرى. من أجل تجنب تحمل اللوم ، نحتاج إلى إعادة كائن جديد في كل مرة. رد الفعل الأول هو ما إذا كان ممكنًا من خلال استنساخ (لأن كل تسلسل JS سيفقد الأداء أيضًا) ، لكن طريقة الاستنساخ التي تأتي مع JDK ليست سوى استنساخ ضحل. إذا كان الكائن يحتوي على كائن معقد آخر ، فلا يزال الكائن المستمد من Clone لديه خطر تعديله.
مقدمة مفصلة:
يمكنك رؤية المثال التالي:
فئة Master {string name ؛ Master (اسم السلسلة) {this.name = name ؛ }}تهيئة فئة رئيسية
الكلب الفئة ينفذ clonable {string name ؛ عمري سيد السيد الكلب العام (اسم السلسلة ، int Age ، Master Master) {this.name = name ؛ this.age = العمر ؛ this.master = master ؛ } override كائن محمي clone () يلقي clonenotsupportedException {return super.clone () ؛ } Override public string toString () {return "{name:" + name + "، Age:" + Age + "، Master:" + master.name + "}" ؛ }}تهيئة الكلب
static static void main (string [] args) يلقي الاستثناء {master master = new master ("ZJ0") ؛ Dog Dog1 = New Dog ("Wangcai" ، 1 ، Master) ؛ Dog2 = (dog) dog1.clone () ؛ dog1.name = "billy" ؛ dog1.master.name = "zj1" ؛ system.out.println (dog2) ؛}أديرها أخيرًا ، والنتيجة هي على النحو التالي:
{الاسم: 王彩 ، العمر: 1 ، ماجستير: ZJ1}Dog1 هو كلب بدائي ، يتم استنساخ Dog2 ، لكن عندما أقوم بتعديل اسم Master's Master ، تغير السيد المستنسخ أيضًا ، والذي من الواضح أنه لا يعمل.
على الرغم من أنني عرفت دائمًا أن طريقة استنساخ الكائن هي استنساخ ضحل ، ولم أستمر في استكشافها. اليوم صادفتها وألقيت نظرة على تنفيذ JVM. يبدو الأمر بسيطًا جدًا. في ملف JVM.CPP ، ابحث عن "jvm_clone"
لم أستخدم طريقة الاستنساخ من قبل. من خلال رمز المصدر ، وجدت أنه عند التشغيل ، أتحقق مما إذا كان الفصل ينفذ الواجهة المستنسخة. أنا لا أتحقق من ذلك أثناء التجميع. ما رأيي؟
وفقًا لحجم الكائن أو البيانات ، افتح جزءًا من الذاكرة بنفس الحجم من الكومة ، ثم نسخ بيانات الكائن الأصلي إلى عنوان الذاكرة الجديد. بالنسبة للأنواع الأساسية ، يمكن نسخ القيمة الأصلية ، ولكن بالنسبة للكائنات الداخلية ، فإنها تحفظ فقط عنوانًا ، وهي أيضًا نسخة من العنوان أثناء النسخ ، وتشير في النهاية إلى نفس الكائن ، مما يسبب المشكلات المذكورة أعلاه.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.