حافظه heap, Stack, Xmx, Xms, Xss در جاوا
مدیریت حافظه فرایند تخصیص و عدم تخصیص اشیا میباشد که در جاوا به آن مدیریت حافظه گفته میشود و این مورد در جاوا به صورت خودکار انجام میشود. به طور کلی میتوان گفت برنامهنویسی که از نحوه قرارگیری بخشهای مختلف برنامه خود بر روی حافظه اطلاع داشته باشد قطعا میتواند الگوریتمهای بهینهتری را طراحی کند. در جاوا, دو نوع حافظه مورد استفاده میباشد که حافظه stack و حافظه heap نامیده میشوند. فهم درست از حافظه هیپ (heap) و استک (Stack) در ماشین مجازی جاوا می تواند درک ما را از اجرای برنامه های جاوا بیشتر نماید.در این مبحث به توضیحاتی مختصر در مورد حافظه heap, Stack, XMX, XMS در جاوا می پردازیم. بعد از اجرای JVM بخش از حافظه در اختیار JVM قرار میگیرد که شامل دوبخش Stack و heap است.
عناوين مطالب: '
مدیریت حافظه در جاوا
مدیریت حافظه فرایند تخصیص و عدم تخصیص اشیا میباشد که در جاوا به آن مدیریت حافظه گفته میشود و این مورد در جاوا به صورت خودکار انجام میشود. به سبب آنکه حافظه کامپیوتر یک مقدار محدود و معین است برنامههای نرمافزاری باید به گونهای طراحی شوند که از حافظه موجود سیستم به نحو صحیح و مدیریت شدهای استفاده کنند. آگاهی از فرایند تخصیص حافظه, در درجه اول به برنامهنویس کمک میکند تا درک صحیحی از شرایط و حوزههای دسترسی متغیرها و نقاط مختلف حافظه داشته باشد و همچنین موجب میشود با مدیریت صحیح حافظه، جلوی متوقف شدن ناگهانی اجرای برنامه به دلیل عدم مدیریت صحیح حافظه گرفته شود.
Guest OS Memory: بعد از فعال شدن JVM همیشه بخشی از حافظه همیشه در اختیار سیستم عامل مهمان یا مجازی جاوا است. بعد از اجرای JVM بخش دیگری از حافظه در اختیار JVM قرار میگیرد که شامل دوبخش Stack و heap است.
حافظه استک (Stack)
حافظه Stack یا پشته مثل دسته ای از بشقاب هستش که روی هم قرار گرفتن… هروقت بخواهید بشقابی روی دسته بشقاب ها قرار بدید(Push) معمولاً اون رو در بالا قرار میدید. به همین ترتیب هروقت بخواهید بشقابی از این دسته بردارید(Pop) همیشه بشقاب بالایی رو برمیدارید… که این دسته رو Stack هه LIFO یا همون LastIn-FirstOut می نامند.
بر اساس تعاریف JVM، هر زمانی که یک ریسمان (Thread) شروع به کار میکند، حافظهای به آن تخصص داده میشود که که بهش Stack گفته میشود. این حافظه متغیرها محلی و نتایج محلی مربوط به ریسمان را در خودش نگه میدارد. حافظه stack در جاوا نیز شامل دوبخش است: method area (-XX) و native area (-Xss) که در ادامه بررسی میشوند.
برای تعیین مقادیر این حافظه از کلیدهای Xss برای ترد ها و XX:MaxPermSize برای توابع استفاده میشود. این حافظه در فراخوانی متدها هم مورد استفاده قرار میگیرد. هنگامی که ریسمان جدیدی درحال اجرا باشد، یا محاسبات ریسمانی نیاز به حافظهی بیشتر داشته باشه و حد حافظه این امکان رو ندهد، خطایی که پرتاب میشه، StackOverflowError هست.
method area (-XX)
عناصری مثل آدرس به مقدار اشیاء (متغیر های رفرنس)، توابع، متغیر های پریمیتیو درون توابع از جمله مواردی هستند که در این حافظه نگهداری می شوند. بعد از واکشی هر استک فریم خود به خود حذف میشوند.
native area (-Xss)
فضای اختصاصی ترد ها (java thread stack size) نگهداری میشود.
حافظه Heap
هنگامی که در جاوا یکی شی جدید به وجود می آید یا به عبارت دیگر هنگام استفاده از کلمه کلیدی new در جاوا، یک ناحیه در Heap برای شی ایجاد شده، در نظر گرفته می شود. متغیر های Private درون بلاک کلاس نیز در heap ذخیره می شوند. در صورتی که در هنگام محاسبات نیاز به حافظهی بیشتر از حد مجاز باشد و از طرفی امکان تخصیص وجود نداشته باشد، خطایی به نام OutOfMemoryError دیده میشود.بصورت پیش فرض این مقدار maximum برابر 64 Mb است ولی می توان با استفاده از پارامتر -Xmx آن را تغییر داد. حافظه Heap نیز شامل دو بخش زیر است:
- initial heap (Xms): ماشین مجازی جاوا یک فضای اولیه برای حافظه Heap در نظر می گیرد که می توان این مقدار را با استفاده از پارامتر -Xms مشخص کرد.
- Jvm Max Heap (-Xmx): در صورتی که JVM نیاز به فضای حافظه Heap بیشتری داشته باشد، JVM بصورت خودکار حافظه Heap را افزایش می دهد و می تواند آن را تا مقدار maximum مورد نظر بالا ببرد.
حافظه Heap شامل کد برنامه، مثل مقدار درون رفرنس ها یا به عبارتی اشیاء که رفرنس آنها در استک قرار دارد، توابع، فیلد ها و داده های استاتیک می باشد. این قسمت از حافظه است که توسط آشغال جم کنم جاوا به صورت خودکار پاک سازی میشوند. در JRE 32bit ، تنها از 2GB حافظه پشتیبانی می شود که از این مقدار تنها 1GB از آن برای Heap قابل مقدار دهی است. (که این مقدار وابسته به سیستم عامل ممکن است حتی تا 512MB نیز کم شود. زمانی که خطای Invalid maximum heap size رخ می دهد بدین معنی است که مقدار حافظه heap درخواستی در حال حاضر برای تخصیص به JVM موجود نیست (سیستم عامل حافظه رم کافی ندارد).
دستور مقابل پارامتر های حافظه JVM را نمایش میدهد.
$ java -X
خروجی دستور java -X:
$
-Xmixed mixed mode execution (default) -Xint interpreted mode execution only -Xbootclasspath: set search path for bootstrap classes and resources -Xbootclasspath/a:append to end of bootstrap class path -Xbootclasspath/p: prepend in front of bootstrap class path -Xnoclassgc disable class garbage collection -Xloggc: log GC status to a file with time stamps -Xbatch disable background compilation -Xms set initial Java heap size -Xmx set maximum Java heap size -Xss set java thread stack size -Xprof output cpu profiling data -Xfuture enable strictest checks, anticipating future default -Xrs reduce use of OS signals by Java/VM (see documentation) -Xdock:name= override default application name displayed in dock -Xdock:icon=override default icon displayed in dock -Xcheck:jni perform additional checks for JNI functions -Xshare:off do not attempt to use shared class data -Xshare:auto use shared class data if possible (default) -Xshare:on require using shared class data, otherwise fail. The -X options are non-standard and subject to change without notice.
دستور دیدن فضای حافظه heap, Stack, XMX, XMS در جاوا
دستور زیر به منظور دیدن فضای حافظه heap, Stack, XMX, XMS در جاوا اختصاص یافته بکار میرود.
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
خروجی دستور فوق:
به منظور در اختیار دادن حافظه مورد نظر به یک برنامه جاوایی از روش دستور دهی زیر استفاده می کنیم:
$ java -Xss512k JavaApp
آدرس کانال تلگرام سایت بیگ دیتا:
آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel
جهت دیدن سرفصل های دوره های آموزشی بر روی اینجا کلیک کنید.
جهت ثبت نام در دوره های آموزشی بر روی اینجا کلیک کنید.
بازدیدها: 4986
برچسبGuest OS Memory method area (-XX) native area (-Xss) Stack XMS در جاوا XMX استک جاوا جاوا استک جاوا هیپ حافظه heap حافظه JAVA حافظه استک حافظه جاوا حافظه در جاوا حافظه هیپ حافظه هیپ در جاوا هیپ
همچنین ببینید
استخراج کلمات کلیدی از متن فارسی با روش های آماری TF-IDF
بعد از مراحل نرمال سازی، حذف کلمات ایستا، تکه کردن کلمات درون متن و ریشه …
قطعه بندی متون فارسی (tokenize) با استفاده از جی هضم (Jhazm)
قطعه بندی متن (Tokenizer) در بخش های قبلی به روش های تشخیص زبان در متون …
یک دیدگاه
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.
matlab mofidi bood mamnoon