سؤال

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

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

المحلول

على سبيل المثال ، الاحتفاظ بقائمة من حالات المستندات السابقة (للتراجع) وإزالة الحالات القديمة فقط عندما تكون الذاكرة على وشك الاستنفاد؟

قد تكون قادرًا على فعل شيء ما SoftReference. لاحظ أيضًا الوثائق العامة لـ java.lang.ref حزمة. إذا كانت الكائنات لا يمكن الوصول إليها إلا عبر أ SoftReference, ، سيتم جمع القمامة قبل حدوث خطأ خارج الذاكرة. لاحظ أن VMs ليست مطلوبة للحفاظ على هذه المراجع قبل مثل هذا الحدث أو تقديم أي ضمانات بشأن الترتيب الذي قد يتم مسحه فيه. قد تكون أفضل دمجها مع شكل من أشكال الثبات.

نصائح أخرى

نعم ، من الممكن بالتأكيد.

ربما سأستخدم قائمة من softreferenceS لحالات المستند السابقة الخاصة بك. هذه مضمونة للتخلص منها قبل حدوث استثناء خارج الذاكرة.

في بعض الفاصل الزمني الدوري ، يمكنك تنظيف المراجع الخالية من القائمة.

أوصي أيضًا بالحفاظ على إشارة عادية إلى أحدث حالة حتى تتمكن دائمًا من ضمان تراجع واحد على الأقل :-)

سيعتمد ذلك على تنفيذ JVM ، ولكن إذا كنت محظوظًا ، فسيحتفظ JVM بالولايات الأخيرة والتخلص من أقدم الحالات. هذا غير مطلوب بشكل صارم في مواصفات JVM ولكن هو السلوك الموصى به.

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