1401-10-29 18:28 تخصیص استاتیک در جاوا - هیپ، پشته و تولید دائمی
xavier12

 
من اخیرا در مورد طرحهای تخصیص حافظه در جاوا زیاد مطالعه میکنم، و در حین خواندن از منابع مختلف شک و تردیدهای زیادی وجود داشته است. من مفاهیمم را جمع آوری کرده ام و درخواست می کنم تمام نکات را مرور کنم و در مورد آنها نظر بدهم. من متوجه شدم که تخصیص حافظه مختص JVM است، بنابراین باید از قبل بگویم که سوال من مخصوص Sun است.

کلاس ها (بارگیری شده توسط کلاس لودرها) در یک منطقه ویژه روی پشته می روند: نسل دائمی
تمام اطلاعات مربوط به یک کلاس مانند نام کلاس، آرایه های Object مرتبط با کلاس، اشیاء داخلی استفاده شده توسط JVM (مانند java/lang/Object) و اطلاعات بهینه سازی به ناحیه Permanent Generation می رود.
همه متغیرهای عضو استاتیک دوباره در ناحیه Permanent Generation نگهداری می شوند.
اشیاء در یک پشته متفاوت پیش می روند: نسل جوان
تنها یک کپی از هر متد در هر کلاس وجود دارد، متد ثابت یا غیراستاتیک. آن کپی در ناحیه Permanent Generation قرار می گیرد. برای روشهای غیر استاتیک، تمام پارامترها و متغیرهای محلی روی پشته قرار میگیرند - و هر زمان که یک فراخوانی مشخص از آن متد وجود داشته باشد، یک stack-frame جدید مرتبط با آن دریافت میکنیم. من مطمئن نیستم که متغیرهای محلی یک روش استاتیک در کجا ذخیره می شوند. آیا آنها در انبوه نسل دائمی هستند؟ یا فقط مرجع آنها در ناحیه Permanent Generation ذخیره می شود و کپی واقعی در جای دیگری است (کجا؟)
من همچنین مطمئن نیستم که نوع بازگشتی یک متد کجا ذخیره می شود.
اگر اشیاء (در نسل جوان) نیاز به استفاده از یک عضو ثابت (در نسل دائمی) داشته باشند، به آنها ارجاع به عضو ثابت داده می شود و فضای حافظه کافی برای ذخیره نوع برگشتی روش و غیره به آنها داده می شود.
ممنون که از این طریق گذشتید!
1401-11-04 20:15
حاجی شریفی
مؤسس سایت
 
سلام
حقیقت آن است که این سایت کوچکی است که بنده برای اشتراک تجربیات سی-شارپی خودم نوشتم ولی نگارش مطالب آموزنده سی-شارپی را هم فرصت نمیکنم انجام دهم
تخصص بنده dotNet و C# و یا مباحث مرتبط مانند EF و VB.NET و... است

مواردی که در مورد Generations اشیا در حافظه فرمودید بسیار شبیه رفتار CLR و کارکرد Garbage Collector در دات نت است. ما هم در دات نت این مفاهیم را داریم ... اشیای کوچک ابتدا در حافظه هایی با سرکشی زودهنگام تر ذخیره میشود و...و...
ولی حقیقت دیگر آنجاست که بنده به JAVA و JVM و... تسلط ندارم و شخص مناسبی جهت پاسخگویی نیستم.

پیشنهاد میکنم سری به سایت barnamenevis.org بزنید ، سایت بزرگ با اعضای زیاد است، بنده خیلی وقت است به آن سایت نرفته انم ولی گمانم حتما افرادی هستند که بتوانند در خصوص JAVA و مفاهیم و معماری پیشرفته درون JVM کمک تان کنند.
1401-11-13 17:33
xavier12

 
باشه خیلی ممنون از کمکت