سؤال

يمكننا استخدام وسيطات JVM للحد من الذاكرة المخصصة لكومة JVM وما إلى ذلك.

أود أن أعرف ما إذا كان بإمكاننا ترميز هذه القيم بجد داخل برنامج Java أثناء وقت التطوير ، بدلاً من إضافة وسيطات JVM في سطر الأوامر عندما ندير البرنامج. هل هو ممكن؟

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

المحلول

يجب أن يكون سؤالي الأول ، لماذا تقوم بتعيينه على الإطلاق؟ يقوم الخادم JVM بتعيين الحد الأقصى إلى 1/4 من حجم الذاكرة الرئيسي وهذا معقول لمعظم التطبيقات. يمكنك تغيير هذا عن طريق بناء JVM أو يمكنك إنشاء اسم مستعار مثل

alias java="java -Xmx30g"

ما يمكنك فعله هو التحقق من استخدام الذاكرة بشكل دوري وقتل العملية إذا كنت تستخدم المزيد. هذه فكرة سيئة للغاية بالطبع.

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

لا يمكنك تغييره لأنه يحتفظ بحجم الذاكرة الأقصى عند البدء.

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

نصائح أخرى

هل تحاول تغيير حجم الكومة في وقت التشغيل؟ لا يمكنك القيام بذلك لأنه يجب ضبط قيمة حجم الكومة عند بدء تشغيل JVM ثم لا يمكن تغييرها.

لا ، لا يمكنك فعل هذا. كل ما يمكنك فعله هو إضافة وسيطة إلى سطر الأوامر لإدارة حجم الكومة.

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

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