كيف يمكنني رؤية ما يوجد في الكومة الخاصة بي في Java؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

لقد تمكنت من الحصول على "تسرب" للذاكرة في تطبيق جافا الذي أقوم بتطويره.عند تشغيل مجموعة اختبار JUnit الخاصة بي، أخرج بشكل عشوائي استثناءات الذاكرة (java.lang.OutOfMemoryError).

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

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

المحلول

تم تضمين VisualVM في أحدث إصدارات Java.يمكنك استخدام هذا لإنشاء تفريغ الكومة وإلقاء نظرة على الكائنات الموجودة فيه.

بدلًا من ذلك، يمكنك أيضًا إنشاء أمر heapdump باستخدام jmap (في jdk/bin dir):

jmap -dump:format=b,file=heap.bin <pid>

يمكنك حتى استخدام هذا للحصول على رسم بياني سريع لجميع الكائنات

jmap -histo <pid>

يمكنني أن أوصي بـ Eclipse Memory Analyzer (http://Eclipse.org/mat) للتحليل المتقدم لمقالب الكومة.فهو يتيح لك معرفة سبب بقاء كائن معين أو مجموعة من الكائنات على قيد الحياة.فيما يلي إدخال بالمدونة يوضح لك ما يمكن لـ Memory Analyzer فعله: http://dev.Eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analogy-finding-memory-leaks-with-one-click/

نصائح أخرى

إذا كنت بحاجة إلى شيء مجاني، حاول VisualVM

من وصف المشروع:

VisualVM هي أداة مرئية تدمج أدوات JDK الخاصة بسطر الأوامر وقدرات إنشاء ملفات تعريف خفيفة الوزن.مصممة لكل من التطوير واستخدام وقت الإنتاج.

هذا سؤال قديم جدًا.ربما بدأ الكثير من الأشخاص في استخدام IntelliJ منذ أن تمت الإجابة عليه في الأصل.يحتوي IntelliJ على مكون إضافي يمكنه إظهار استخدام الذاكرة يسمى عرض ذاكرة مصحح أخطاء JVM.

استخدام ملف التعريف مثل JProfiler أو YourKitProfiler

عملت JProfiler بشكل جيد للغاية بالنسبة لي ....

http://www.ej-technologies.com/products/jprofiler/overview.html

استخدم ال محلل الذاكرة الكسوف

لا توجد أداة أخرى على علم بأي أداة تقترب من وظائفها وأدائها وسعرها (مجاني ومفتوح المصدر) عند تحليل عمليات تفريغ الكومة.

إذا كنت تستخدم نظامًا يدعم GTK، فيمكنك محاولة استخدامه أحزاب اللقاء المشترك.

يمكنك تجربة Memory Leak Detector الذي يعد جزءًا من مجموعة أدوات JRockit Mission Control.يسمح لك بفحص الكومة أثناء تشغيل JVM.لا تحتاج إلى التقاط لقطات في كل وقت.يمكنك فقط الاتصال عبر الإنترنت بـ JVM ثم معرفة كيفية تغير الكومة بين مجموعات البيانات المهملة.يمكنك أيضًا فحص الكائنات ومتابعة المراجع بيانيًا والحصول على تتبعات المكدس من حيث يقوم تطبيقك بتخصيص الكائنات حاليًا.هنا مختصر مقدمة.

الأداة مجانية للاستخدام للتطوير ويمكنك تنزيلها هنا.

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