هل تحتاج عملية 32 بت إلى ذاكرة أكبر عند تشغيلها على نظام 64 بت؟

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

سؤال

لدي تطبيق جافا متعطش للذاكرة إلى حد ما.في أنظمة 32 بت التي تعمل بنظام التشغيل Windows XP Professional، سيعمل التطبيق بشكل جيد إذا أعطيته -Xmx1280m.كل شيء أدناه سينتهي في java.lang.OutOfMemoryError: Java heap space استثناء.

إذا قمت بتشغيل نفس التطبيق على نظام التشغيل Windows XP Professional 64 بت (كل شيء آخر متماثل تمامًا) فسيتطلب ذلك -Xms1400m لمنع حالة OutOfMemory.

إلى فهمي ، إذا كان لدي برنامج C وقمت بتجميعه مقابل 32 بت ، وسيحتاج إصدار 64 بت إلى المزيد من الذاكرة لأن المؤشرات أوسع وما إلى ذلك.في مثال جافا الخاص بي، فإن الجهاز الظاهري (Sun) هو نفسه والرمز الثانوي هو نفسه.

لماذا يحتاج إلى المزيد من الذاكرة على جهاز 64 بت؟

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

المحلول

ربما لأن آلة افتراضية يختلف التنفيذ بين بنية 32/64 بت بطريقة تستهلك المزيد من الذاكرة (الأنواع الأوسع، وGC المختلفة).

لا يكون رمز البايت ذا صلة عندما يقوم بتمرير المهام إلى النظام الأساسي.لست متأكدًا من أن Java وكفاءة الذاكرة هما مصطلحان سأضعهما معًا على أي حال:P

نصائح أخرى

على الرغم من أن رمز البايت الخاص بك هو نفسه، إلا أن JVM يحول ذلك إلى رمز الجهاز، لذلك لديه نفس الأسباب مثل C التي تتطلب مساحة أكبر للذاكرة.

إنه نفس السبب الذي أدرجته بالفعل لبرنامج C.يستخدم نظام 64 بت عناوين ذاكرة كبيرة، مما يجعله "أكثر تسريبًا" (أعتقد أن هذا هو المصطلح الذي سمعته يستخدم لوصفه).

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