اداره خودکار حافظه
شنبه 27 آذر 1389 7:25 AM
جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شی استفاده میکند. برنامهنویس زمانی که اشیا به وجود میآیند، این حافظه را تعیین میکند. و در زمان اجرا نیز، زمانی که این اشیا در استفادهٔ زیاد طولانی نباشند، برنامه نویس مسئول بازگرداندن این حافظه است. زمانی که مرجعی برای شیهای باقیمانده نیست، شیهای غیر قابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه،انتخاب میشوند. اگر برنامهنویس مقداری از حافظه را برای شیهایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق میافتند.
یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامهنویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده میگیرد. در بعضی از زبانها حافظه لازم برای ایجاد یک شی، به صورت ضمنی و بدون شرط، به پشته تخصیص داده میشود. و یا بهطور صریح اختصاص داده شده و از heap بازگردانده میشود. در هر کدام از این راهها، مسئولیت ادارهٔ اقامت حافظه با برنامهنویس است. اگر برنامه شی را برنگرداند، سوراخ حافظه اتفاق میافتد. اگر برنامه تلاش کند به حافظهای را که هماکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بیثبات شده و یا تخریب شود. این ممکن است با استفاده از اشارهگر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد میشود. بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد. بهطوری که این زمانی اتفاق میافتد که برنامه بیکار باشد. اگر حافظهٔ خالی کافی برای تخصیص شی جدید در heap وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. در جایی که زمان پاسخ یا اجرا مهم باشد، ادارهٔ حافظه و منابع اشیا استفاده میشوند.
جاوا از نوع اشارهگر ریاضی C و ++C پشتیبانی نمیکند. در جایی که آدرس اشیا و اعداد صحیح میتوانند به جای هم استفاده شوند. همانند ++C و بعضی زبانهای شیگرای دیگر، متغیرهای نوعهای اولیهٔ جاوا شیگرا نبودند. مقدار نوعهای اولیه، مستقیماً در فیلدها ذخیره میشوند. در فیلدها (برای اشیا) و در پشته (برای توابع)، بیشتر از heap استفاده میشود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شیگرای خالص به حساب نمیآید.