أنا من المفترض أن أسمي EntityManager.clear () في كثير من الأحيان لتجنب تسرب الذاكرة؟

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

سؤال

أنا جديد على JPA / Openjpa ولاحظت أنه إذا لم أتصل EntityManager.clear() بعد أن أقامت الكيانات أحصل على OutOfMemoryError (أظل إضافة كيانات جديدة في حلقة). لست متأكدا مما إذا كان هذا هو السلوك المتوقع أو إنه فقط و OpenJPA 1.2.1 خلل.

إذن، هل سأحتاج إلى فصل الكيانات بنفسي صراحة؟ إذا لم أكن كذلك، فهذه ممارسات جيدة على أي حال؟

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

المحلول

ليس لدي الكثير من الخبرة مع JPA. لكن هذا سيكون مفيدا -
في JPA يجب عليك إما:
- إنشاء EntityManager جديد لكل معاملة.
- اتصل بوضح () بعد كل معاملة لمسح سياق الاستمرار.

نصائح أخرى

يعتمد على عدد الكائنات التي تحضرها في عملية الثبات (قراءة). إذا كنت تتعامل مع أرقام كبيرة (أو بعض الكائنات كبيرة)، فعندئذ يمكن استخدام الوضوح () منطقيا. في كل مرة يتم فيها قراءة كائن يجب وضعه في ذاكرة التخزين المؤقت L1 بواسطة jpa imply.

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

بقدر ما تشعر تجربتي، نادرا ما تستخدم EM. اعتدت على تنفيذ السبات، وأساسيات Toplink. لا خبرة مع Openjpa، ومع ذلك.

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