مدل حافظه جاوا (JMM) تعریف می کند که چگونه موضوعات در جاوا از طریق حافظه تعامل می کنند، توضیح می دهد که چگونه و چه زمانی تغییرات ایجاد شده توسط یک رشته برای دیگران قابل مشاهده است. درک JMM برای نوشتن برنامه های جاوا همزمان و اجتناب از مسائل رایج مانند نژاد داده ها و مشکلات دید ضروری است.

پایه های مدل حافظه جاوا

JMM قوانینی را برای چگونگی خواندن و نوشتن متغیرهای مشترک مشخص می کند.این تضمین می کند که عملیات اتمی است و تضمین هایی در مورد دید تغییرات در سراسر رشته ها ارائه می دهد. مدل مفاهیمی مانند روابط پیش از وقوع را معرفی می کند که تعیین کننده ترتیب اقدامات در اجرای همزمان است.

نمونه های عملی

یک مثال ساده را در نظر بگیرید که در آن یک رشته به روز رسانی یک متغیر مشترک و یک رشته دیگر آن را بدون هماهنگ سازی مناسب بخواند، موضوع خواندن ممکن است داده های را به دلیل کاتتر یا سفارش مجدد مشاهده کند.استفاده از بلوک های هماهنگ کننده یا متغیرهای فرار، نظارت بر اساس قوانین JMM را تضمین می کند.

مسائل و راه حل های مشترک

  • مسابقه داده ها: هنگامی که چندین رشته داده های مشترک را بدون هماهنگ سازی تغییر می دهند، از بلوک های همگام شده یا کلاس های اتمی برای جلوگیری از این کار استفاده کنید.
  • [در این میان] [مشرکان]: [[۱]] [۱] [۱]] [۱] [۱] [۱] [۱] [۱]] تغییراتی که توسط یک رشته ایجاد شده است، برای دیگران قابل مشاهده نیست.
  • سفارش: Compiler یا سفارش مجدد CPU می تواند منجر به رفتار غیر منتظره شود.