سؤال

هل هناك طريقة لاستخدام وزن الذبابة الكائنات مع استمرار السبات الخرائط?بياناتي نموذج يحتوي على العديد من الكائنات التي سوف تكون هي نفسها.بدلا من وجود نسخة منفصلة لكل من هذه الكائنات نفسه أود أن استخدام وزن الذبابة تصميم نمط المرجع نفسه دائما المادي.كيف يمكن تحقيق ذلك في السبات?

راجع للشغل.هل كل JVMs تحسين استخدام السلاسل في هذه الطريقة أنه عند نفس السلسلة استخدامها عدة مرات ، وسوف يكون دائما نفس البدنية سبيل المثال ؟

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

المحلول

وهذا يعتمد.

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

لكيانات السبات افتراضيا عاقل ويريد أن تكون متسقة في المعاملات، وبالتالي لن مشاركة الكيانات بين الجلسات لتجنب حالات السباق من البيانات الخاصة بك - وأنا لا أعتقد أن هذا هو ما تريد.

ولكن في الحالة هو (وهذا غير مستحسن تماما دون أن يعرفوا حقا ما تقومون به) يمكنك تنفيذ Interceptor.getEntity () الذي يهدف للتخزين المؤقت المستوى الثاني. في هذه الطريقة يمكنك العودة كيان (وحتى بعض تتقاسمها الجلسات الأخرى) وسيكون لديك فعليا نمط وزن الذبابة للكيانات الخاصة بك.

ولكن أنا أوصي ضد هذا لاتساق البيانات الخاصة بك - أفضل بكثير لديها قيم ثابتة وزن الذبابة الفعلية المشار إليه من قبل الكيانات من أيضا محاولة لوزن الذبابة الكيانات الفعلية

نصائح أخرى

نعم ، يمكنك تنفيذ وزن الذبابة نمط السبات.

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

كل وزن الذبابة سبيل المثال الاحتياجات الخاصة هوية الكائن.إضافية الدولة هو السبيل لتنفيذ الهوية التمييز بين الكائنات التي تشترك في الدولة.

public boolean equals(Object obj){
  Fly other; [..]//check type
  //null checks ommitted
  return other.myState.equals(myState) && other.commonState.equals(commonState); 
}

إذا كان الكائن الهوية المشتركة بين حالات السبات تفسير جميع الحالات المادية (المراجع) في نفس الحالة.السبات يستخدم يساوي طريقة للتحقق من هوية الكائن الخاص بك المساواة في تنفيذ سيعود (! a.equals(a) == true) وهو أمر غير قانوني. متساوية قد تكون انعكاسية.إذا كنت كسر هذا العقد جميع المكتبات التي تعتمد على العقد سيتم تقسيم (مجموعات السبات ، إلخ.).

لا يمكن تطبيق المساواة في طريقة استخدام السبات معرف كائن التمييز بين الكائنات.وهذا من شأنه أن يجعل الكائن الهوية تعتمد على استمرار الدولة (مستمرة أو مؤقتة).

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

سلسلة:فقط المنضوية سلاسل سوف تكون مشتركة.ليس هذا هو أفضل حل معظم الوقت.ومن المناسب الرموز (اسم الفئة اسم الأسلوب ، إلخ.).على المنضوية سلاسل سوف أبدا من القمامة التي تم جمعها يجب أن يكون لديك سلسلة سبيل المثال التي من شأنها أن تكون القمامة التي تم جمعها على أي حال new String("..").intern().فإنه لن ينقذ المخصصات.هناك فقط القاصر ميزة أن قاعدة السلسلة لن البقاء على قيد الحياة gc جيل أو يمكن تخصيصها على المكدس (مع الهروب من التحليل في بقعة ساخنة تمكين وجد).

<اقتباس فقرة>   

وتفعل كل JVMs تحسين استخدام سلاسل بطريقة بحيث عندما يستخدم نفس السلسلة عدة مرات، وسوف يكون دائما نفس المثال المادي؟

وأشك في ذلك كثيرا. في ملف فئة نفسه، عندما definined مثل:

String s1 = "Yes";
String s2 = "Yes";

وربما عليك s1 و== S1.

ولكن إذا كان لديك مثل:

String x = loadTextFromFile(); // file contains es
StringBuilder b = new StringBuilder();
s2 = b.append("Y").append(x).toString(); // s2 = "Yes"

وأنا لا أعتقد أن وقت يجري لفحص ومقارنة كل السلاسل تحميل ل قيمة الإرجاع منهم باني.

وهكذا، دائما مقارنة الكائنات مع الأنداد (). هذا هو نصيحة جيدة على أي حال لأن كل متساوين جيدة تبدأ:

if (this == o) {
    return true;
}

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

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