سؤال

في C، يمكنني تخصيص سجل لمتغير، على سبيل المثال:

register int i = 0;

أنا أدرك أن Java هي لغة تفسير، وهي كثيرة من التجريدات بعيدا عن وحدة المعالجة المركزية.

هل هناك أي آلية متوفرة حتى الطلب (وإذا كانت الهندسة المعمارية لا تسمح بذلك، فما أظهار متغيري في سجل بدلا من الانتقال إلى ذاكرة التخزين المؤقت أو الذاكرة الرئيسية؟

لا أفترض أن هناك بأي حال من الأحوال، لكنني مفاجأة سارة من قبل.

شكرا لك،

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

المحلول

لا، لا توجد طريقة لطلب هذا في جافا. ومع ذلك، هناك بعض الأشياء التي يمكنك القيام بها والتي ستمنع السجل من استخدامها، مثل تطبيق volatile معدل لمتغير العضو.

نصائح أخرى

register في C لا يضع متغيرا للتسجيل. إنه ببساطة يمنح المترجم تلميح، أنه من المحتمل أن يكون من الجيد وضعه في سجل.

في جافا لا يوجد ما يعادلها.

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

في الواقع، يجب أن يكون مترجم نقطة اتصال Hotspot قادرا على القيام بعمل أفضل من برنامج التحويل البرمجي C / C ++، لأنه يحتوي على مزيد من المعلومات للعمل معه. C / C ++ التحويل البرمجيات يجب أن تخمين؛ نقطة ساخنة يمكن قياس.

ليس هناك ما يعادله في جافا. حتى في ج ليس هناك ما يضمن أن المتغير سيتم تخزينه في السجل والمجمعات المجامرة أحرار في تجاهله.

في Java، سيتم تفسير الطريقة حتى يحدد Jit النقاط الساخنة أنه يحتاج إلى تجميعه. بالنسبة للتعمير المترجمة يستخدم خوارزمية تلوين لتعيين المتغيرات والقيم المؤقتة للتسجيل، أو الكتابة إلى / من ذاكرة الوصول العشوائي في حالة تجاوز السجل.

أنا أدرك أن Java هي لغة تفسير، وهي كثيرة من التجريدات بعيدا عن وحدة المعالجة المركزية.

لقد أجبت كثيرا على سؤالك الخاص هناك :-)

ولكن على محمل الجد، بشكل عام، اكتب الكود الخاص بك بوضوح وبساطة ما تستطيع، وسوف يقوم JVM بتعامل مع الكود المناسب.

يمكنك إنشاء شرح يسمى Register لكن JVM ستجاهلها بالتأكيد. على سبيل المثال

@register int i = 0;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top