حافظه 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 است.

حافظه heap, Stack, XMX, XMS در جاوا
حافظه heap, Stack, XMX, XMS در جاوا

حافظه استک (Stack)

 حافظه Stack یا پشته مثل دسته ای از بشقاب هستش که روی هم قرار گرفتن… هروقت بخواهید بشقابی روی دسته بشقاب ها قرار بدید(Push) معمولاً اون رو در بالا قرار میدید. به همین ترتیب هروقت بخواهید بشقابی از این دسته بردارید(Pop) همیشه بشقاب بالایی رو برمیدارید… که این دسته رو Stack هه LIFO یا همون LastIn-FirstOut می نامند.

بر اساس تعاریف JVM، هر زمانی که یک ریسمان (Thread) شروع به کار می‌کند، حافظه‌ای به آن تخصص داده می‌شود که که بهش Stack گفته می‌شود. این حافظه متغیر‌ها محلی و نتایج محلی مربوط به ریسمان را در خودش نگه می‌دارد. حافظه stack در جاوا نیز شامل دوبخش است: method area (-XX) و native area (-Xss) که در ادامه بررسی میشوند.

برای تعیین مقادیر این حافظه از کلید‌های Xss برای ترد ها و XX:MaxPermSize برای توابع استفاده می‌شود. این حافظه در فراخوانی متد‌ها هم مورد استفاده قرار می‌گیرد. هنگامی که ریسمان جدیدی درحال اجرا باشد، یا محاسبات ریسمانی نیاز به حافظه‌ی بیشتر داشته باشه و حد حافظه این امکان رو ندهد، خطایی که پرتاب می‌شه، StackOverflowError هست. 

 
حافظه heap, Stack, Xmx, Xms, Xss در جاوا
حافظه heap, Stack, Xmx, Xms, Xss در جاوا

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
حافظه heap, Stack, XMX, XMS در جاوا
حافظه heap, Stack, XMX, XMS در جاوا

برای دیدن فلیم های سینماییِ مهیج و جذاب”در حوزه فناوری اطلاعات، اوسینت و هوش مصنوعی“، بر روی اینجا کلیک کنید.

آدرس کانال تلگرام سایت بیگ دیتا:

t.me/bigdata_channel

آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel

جهت دیدن سرفصل های دوره های آموزشی بر روی اینجا کلیک کنید.

جهت ثبت نام در دوره های آموزشی بر روی اینجا کلیک کنید.

بازدیدها: 4910

همچنین ببینید

مراحل متن کاوی

استخراج کلمات کلیدی از متن فارسی با روش های آماری TF-IDF

بعد از مراحل نرمال سازی، حذف کلمات ایستا، تکه کردن کلمات درون متن و ریشه …

قطعه بندی متون

قطعه بندی متون فارسی (tokenize) با استفاده از جی هضم (Jhazm)

قطعه بندی متن (Tokenizer) در بخش های قبلی به روش های تشخیص زبان در متون …

یک دیدگاه

  1. matlab mofidi bood mamnoon

دیدگاهتان را بنویسید