مشخصات مقاله
-
1771
-
0.0
-
5585
-
0
-
0
آموزش Java – مدیریت حافظه/garbage collection در پردازش موازی جاوا/multithreading
آموزش Java – مدیریت حافظه/garbage collection در پردازش موازی جاوا/multithreading
در برنامه نویسی جاوا منظور از garbage آبجکت های بلااستفاده و سرگردان (unreferenced object) هستند.
garbage collection فرایندی است که در طی آن حافظه ی بلااستفاده زمان اجرا به صورت خودکار بازیابی می شود. به عبارت دیگر آبجکت هایی که دیگر کاربرد ندارند را از حافظه پاک می کند.
در زبان های C و C++ به ترتیب از توابع free() و delete() برای این منظور استفاده می شود. اما جاوا این کار را خود به صورت اتوماتیک انجام داده و به این دلیل در مدیریت حافظه بهتر عملی می کند.
مزیت استفاده از garbage collection
- از آنجایی که آبجکت های بلااستفاده (unreferenced objects) را از حافظه ی heap حذف کرده و آن را آزاد می سازد، می توان گفت که اپلیکیشن های جاوا در استفاده از حافظه بهنیه عمل می کنند.
- garbage collector (که بخشی از JVM است) مدیریت حافظه را به صورت خودکار انجام می دهد از اینرو زحمت آن را از روی دوش برنامه نویس برمی دارد.
در چه شرایطی یک آبجکت می تواند بدون reference و بلااستفاده شود؟
راه های مختلفی وجود دارد:
- با قرار دادن مقدار null در آبجکت (reference)
- با قرار دادن (محتوای) یک آبجکت (reference) در آبجکت دیگر
- از طریق آبجکت فاقدنام و ناشناخته (anonymous)
با قرار دادن مقدار null در آبجکت
Employee e=new Employee(); e=null;
با قرار دادن یک آبجکت در آبجکت دیگر
Employee e1=new Employee(); Employee e2=new Employee(); e1=e2;//now the first object referred by e1 is available for garbage collection
از طریق آبجکت های فاقدنام و ناشناخته (annonymous object)
new Employee();
متد finalize()
JVM هر بار قبل از حذف آبجکت از حافظه (garbage collect)، متد finalize() را صدا می زند. این متد می تواند عملیات پاک سازی و آزاد سازی منابع سیستمی را انجام دهد.
متد finalize() در سطح کلاس Object به صورت زیر تعریف شده است:
protected void finalize(){}
garbage collector دستگاه مجازی جاوا (JVM)، تنها آن آبجکت هایی که با کلیدواژه ی new ساخته شده اند را حذف می کند. اگر آبجکت را بدون استفاده از new ایجاد کرده باشید، کافی است متد finalize() را برای حذف آن ها و انجام عملیات پاک سازی فراخوانی نمایید.
متد gc()
متد gc() برای فراخوانی garbage collector و انجام عملیات پاک سازی مورد استفاده قرار می گیرد. این متد در سطح کلاس های System و Runtime تعریف شده است.
public static void gc(){}
عملیات garbage collection و پاک سازی حافظه را یک daemon thread به نام Garbage Collector(GC) در پس زمینه اجرا می کند. thread نام برده قبل از اینکه آبجکت از حافظه پاک شود، متد finalize() را فراخوانی می کند.
مثال کاربردی ساده از اجرای garbage collection در Java
public class TestGarbage1{
public void finalize(){System.out.println("object is garbage collected");}
public static void main(String args[]){
TestGarbage1 s1=new TestGarbage1();
TestGarbage1 s2=new TestGarbage1();
s1=null;
s2=null;
System.gc();
}
}
خروجی:
object is garbage collected object is garbage collected
نمی توان گفت finalization و garbage collection با قطعیت تمام و به صورت موفقیت آمیز اجرا می شوند.