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

 
باشه خیلی ممنون از کمکت
چهار روز پیش Static Allocation in Java - Heap, Stack and Permanent Generation
charlotteemma

 
Stack memory is used for storing local variables and function calls and has a fixed size. It is fast and efficient, but can only be used for storing short-lived data. Heap memory is used for Static memory allocation is a process in which memory for variables and data spacebar clicker structures is reserved at compile time, before the program runs. This means that the size and location of Static variables are stored in a dedicated memory area, separate from both the stack and the heap, often referred to as the data segment or a similar area, and persist for the duration of the If any member in a class is declared as static, it means that even before the class is initiated, all the static members can be accessed and become active.program's execution. memory blocks are fixed and cannot be changed at runtime.storing objects and class instances and is dynamically allocated at runtime.