جافا المفرد vs ثابت - هل هناك الأداء الحقيقي فائدة ؟

StackOverflow https://stackoverflow.com/questions/28241

  •  09-06-2019
  •  | 
  •  

سؤال

أنا دمج CVS فرع واحدة من أكبر التغييرات هو استبدال أينما وقع المفرد النمط مع فئات مجردة أن يكون ثابت initialisation كتلة كل أساليب ثابتة.

هل هذا شيء يستحق الاحتفاظ به لأنه سوف تتطلب دمج الكثير من الصراعات ، أي نوع من الحالة أود أن تبحث في هذا إعادة بيع ديون أن تكون جديرة بالاهتمام ؟

نحن تشغيل هذا التطبيق تحت يبلوغيتش 8.1 (حتى JDK 1.4.2)


آسف توماس ، اسمحوا لي أن أوضح..

رئيس الإصدار يحتوي على نمط المفرد التقليدي (خاص منشئ ، getInstance() وما إلى ذلك)

فرع النسخة لا منشئ ، 'العامة فئة مجردة و تعديل كل الطرق على الكائن أن يكون 'ثابت'.التعليمات البرمجية التي كانت موجودة في القطاع الخاص منشئ هي انتقلت الى كتلة ثابتة.

ثم جميع الاستخدامات من الفئة يتم تغيير مما يسبب صراعات متعددة في الدمج.

هناك عدد قليل من الحالات حيث تم إجراء هذا التغيير.

هل كانت مفيدة؟

المحلول

من الصارم وقت الأداء وجهة نظر الفرق لا يكاد حقا.الفرق الرئيسي بينهما يكمن في حقيقة أن "ثابت" دورة حياة مرتبط classloader ، في حين المفرد انها العادية سبيل المثال دورة الحياة.عادة من الأفضل أن تبقى بعيدا عن ClassLoader الأعمال ، يمكنك تجنب بعض المشاكل صعبة ، وخاصة عند محاولة تحديث تطبيق ويب.

نصائح أخرى

وأود أن استخدام المفرد إذا كان هناك حاجة إلى تخزين أي دولة فئات ثابتة على خلاف ذلك.ليس هناك نقطة في إنشاء شيء ، حتى مثيل واحد, إلا أنه يحتاج إلى تخزين شيء.

ثابت هو سيء بالنسبة للتوسعة منذ أساليب ثابتة و الحقول لا يمكن تمديد أو تجاوز من قبل الفئات الفرعية.

كما انها سيئة وحدة الاختبارات.في اختبار وحدة لا يمكن الحفاظ على الآثار الجانبية من اختبارات مختلفة من تمتد منذ كنت لا تستطيع السيطرة على classloader.حقول ثابتة في تهيئة وحدة واحدة الاختبار سوف تكون مرئية في آخر ، أو ما هو أسوأ, تشغيل الاختبارات بالتزامن سوف تسفر عن نتائج غير متوقعة.

المفرد عموما موافق نمط عندما تستخدم لماما.أنا أفضل أن استخدام دي الإطار اسمحوا أن إدارة الحالات بالنسبة لي (ربما ضمن نطاقات مختلفة ، كما في Guice).

إذا منصبي الأصلي هو الفهم الصحيح و المناقشة من الشمس التي كانت مرتبطة دقيقة (الذي أعتقد أنه قد يكون) ، ثم أعتقد أن لديك لجعل التجارة بين الوضوح والأداء.

اسأل نفسك هذه الأسئلة:

  1. هل الكائن المفرد جعل ما أفعله أكثر وضوحا ؟
  2. هل أنا بحاجة إلى كائن للقيام بهذه المهمة أو هو أكثر ملاءمة أساليب ثابتة?
  3. هل أنا في حاجة إلى الأداء الذي لا يمكن أن تكتسب عن طريق عدم استخدام المفرد?

من تجربتي, الشيء الوحيد الذي يهم هو واحد الذي هو أسهل وهمية في وحدة الاختبارات.لقد شعرت دائما المفرد هو أسهل من الطبيعي أن تسخر بها.إذا كانت المؤسسة الخاصة بك يتيح لك استخدام JMockit لا يهم حيث يمكنك التغلب على هذه المخاوف.

هل هذه المناقشة المساعدة ؟ (أنا لا أعرف إذا كان من المحرمات على رابط آخر البرمجة المنتدى لكن انا لا افضل مجرد اقتباس مناقشة كله =) )

الشمس النقاش في هذا الموضوع

الحكم يبدو أنه لا يجعل ما يكفي من الفرق إلى هذه المسألة في معظم الحالات ، على الرغم من الناحية الفنية ثابت أساليب أكثر كفاءة.

كتابة بعض التعليمات البرمجية لقياس الأداء.الإجابة ستكون تعتمد على JVM(الشمس جدك قد تؤدي بشكل مختلف من JRockit) و VM أعلام التطبيق الخاص بك يستخدم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top