المشكلة تخصيص مساحة كومة أكثر من 4 جيجابايت عند الاتصال جافا "من بيثون"

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

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أستخدم استدعاء OS.System من Python لتشغيل ملف Jar. يتطلب ملف Jar مساحة كومة كبيرة وبالتالي أنا أخصيص مساحة كومة 4 جيجابايت باستخدام XMX. عندما أقوم بتنفيذ الأمر "Java -XMS4096M -XMX4096M -JAR Camxnet.jar Net.txt" من سطر الأوامر ينفذ بشكل صحيح، إلا أنه عندما أسميها من برنامج Python عبر OS.System، فإنه يعمل فقط إذا كانت الذاكرة المخصصة أقل من 4GB، وإلا فإنه فشل في التنفيذ. أي حلول؟

عن طريق فشل في التنفيذ أعني أن نافذة الأوامر تظهر تشير إلى أنه تم استدعاء نظام OS.SySty ثم يختفي، وسأحقق من رمز الخطأ إذا تم إرجاعه. ومع ذلك، لا تتم مصادفة أي مشاكل في حالة XMX، يتم تعيين XMS إلى قيمة أقل.

حسنا، لقد راجعت كلا الإصدارين وهناك فرق يتم استدعاء المرء عبر Python هو وضع مختلط Java Hotspot العميل VM، ومشاركة بينما يتم استدعاء المرء الذي يتم استدعاؤه عبر سطر الأوامر العادي هو خادم Java Hotspot 64 بت

كيف يقوم بنظام Os.System في Python بإجراء الصحيح هو خادم 64 بت.

تحديث: حاولت استخدام الوحدة النمطية الفرعية حتى الآن إصدار عودة Java هو نفسه من نظام Os.System

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

المحلول

من الصعب أن تتأكد من عدم معرفة المزيد من التفاصيل - مثل نظام التشغيل الذي أنت عليه - ولكن تخميني هو أنك تستخدم إصدار 32 بت من Python مما يعني أنه عند تشغيل Java، كما تحصل أيضا على 32- نسخة بت التي لديها حد حجم الكومة 4GB.

لاختبار ما إذا كان هذا هو الحال، ومقارنة إخراج java -version عند تشغيل من سطر الأوامر وعند التشغيل من البرنامج النصي Python الخاص بك.

نصائح أخرى

كنت أواجه نفس المشكلة إطلاق Java 64bit من 32 بت الثهاب. قمت بحل المشكلة باستخدام اقتراح Dave WebB الخاص بوضع المسار الكامل إلى 64 بت java.exe في البرنامج النصي Python. هذا يعمل بشكل جيد لذلك ليس من الضروري استخدام بيثون 64 بت

مجرد اقتراح، ولكن حاول استخدام subprocess.call () بدلا من Os.System ()، هو المفضل وقد تتعامل مع المشكلة التي تعاني منها. أنا فضولي لمعرفة ما إذا كان يفعل ...

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