[java] كيف تجبرك على جمع القمامة من شل؟



3 Answers

منذ JDK 7 يمكنك استخدام أداة JDK command tool 'jcmd' مثل:

jcmd <pid> GC.run

Question

لذلك أنا أبحث في كومة مع jmap على مربع بعيد وأريد إجبار جمع القمامة على ذلك. كيف تفعل هذا دون أن تظهر في jvisualvm أو jconsole والأصدقاء؟

أعلم أنك لا يجب أن تكون في ممارسة فرض جمع القمامة - يجب عليك فقط معرفة السبب في أن الكومة كبيرة / متنامية.

كما أنني أدرك أيضًا أن System.GC () لا تجبر بالفعل على تجميع البيانات المهملة - إنها تخبر فقط GC التي ترغب في حدوثها.

بعد قولي هذا هناك طريقة للقيام بذلك بسهولة؟ بعض التطبيق سطر الأوامر أنا في عداد المفقودين؟




لا أعتقد أن هناك أي خيار سطر الأوامر لنفسه.

سوف تحتاج إلى استخدام jvisualvm / jconsole لنفسه.

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

على أي حال ، لا ينبغي عليك إجبار GC ، لأن ذلك سيؤثر بالتأكيد على خوارزمية GC ويجعل برنامجك بطيئًا.




مجرد:

kill -SIGQUIT <PID>



هناك بعض الحلول الأخرى (الكثير منها جيد هنا بالفعل):

  • اكتب رمزًا صغيرًا للدخول إلى MemoryMBean واستدعاء gc() .
  • استخدام عميل JMX لسطر الأوامر (مثل cmdline-jmxclient ، jxmterm ) وتشغيل عملية gc() على MemoryMBean

المثال التالي هو cmdline-jmxclient:

$ java -jar cmdline-jmxclient-0.10.3.jar - localhost:3812 'java.lang:type=Memory' gc

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




Related