سؤال

كل 15 إلى 30 دقيقة يعرض Netbeans رسالة "java.lang.OutOfMemoryError: PermGen space".مما تعلمته من Google يبدو أن هذا مرتبط بتسريبات أداة تحميل الفصل أو تسرب الذاكرة بشكل عام.

لسوء الحظ، كانت جميع الاقتراحات التي وجدتها مرتبطة بخوادم التطبيقات وليس لدي أي فكرة لتكييفها مع Netbeans.(لست متأكدًا من أنها نفس المشكلة)

هل هي مشكلة في طلبي؟كيف يمكنني العثور على المصدر؟

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

المحلول

إنه بسبب التحميل المستمر للفئة.

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

في التطبيقات التي غالبًا ما تقوم بتحميل الفئات خلال فترة الحياة بأكملها، فهي:

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

تحتاج إلى تشغيل تجميع البيانات المهملة الكومة الدائمة لمنع هذا الخطأ.

أستخدم الخيارات

-XX:MaxPermSize=256M
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled

(أوقف الكسوف 3.4 من الرمي "java.lang.OutOfMemoryError: PermGen space" لذا يجب أن يعمل أيضًا مع netbeans).

يحرر:لاحظ فقط أنه بالنسبة لـ Netbeans، قمت بتعيين هذه الخيارات في:[Netbeans installation]\etc\netbeans.confيجب عليك بادئة هذه الخيارات بـ -J وأضفهم netbeans_default_options (انظر التعليقات في netbeans.conf لمزيد من المعلومات).

نصائح أخرى

وحاول إضافة الحجج التالية في نتبيانس netconf: -J-XX: MaxPermSize = 256M

ربط على كيفية تعيين حجم PermSize. وأغلب الظن هذه ليست مشكلة من التعليمات البرمجية الخاصة بك، وبالتالي فإن الحل الوحيد سيكون لزيادة وPermSize. لقد وجدت أن هذا هو في كثير من الأحيان، عند العمل مع JAXB. بشكل عام، إذا كنت تستخدم العديد من المكتبات التي أنفسهم تعتمد أيضا على العديد من الملفات جرة الأخرى، الحجم الافتراضي للفضاء PermGen قد لا تكون كبيرة بما فيه الكفاية.

وانظر هذه بلوق وظائف لمزيد من التفاصيل: Classloader تسرب و كيفية إصلاح اللعين "java.lang.OutOfMemoryError: الفضاء PermGen"

إذا كنت تقوم بتطوير تطبيقات الويب، في محاولة لوضع خيار VM الخادم على

و-Xmx512m -Xms512m -XX: MaxPermSize = 512M

والذهاب إلى أدوات / خوادم // منصة / خيارات VM (نتبيانس 7.4)

ويمكنك تغيير خيارات بدء التشغيل من نتبيانس JVM عن طريق تحرير /etc/netbeans.conf الملف. أنا غالبا ما يكون هذا النوع من الأخطاء عندما كنت تطوير تطبيق الويب وI نشر في كثير من الأحيان. في هذه الحالة، وأنا أعد قط من وقت لآخر.

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