Monday, June 7, 2021

Java Programming sinhala tutorial - Garbage Collection - Part 31

Garbage Collection

    JVM එක මගින් java class run කරන විට, එම class වලට අදාළ object JVM එක තුල නිර්මාණය වේ. මෙලෙස JVM එක තුල සියලු objects නිර්මාණය වන විට, එහි ඉඩ මදි වුවහොත්, JVM එක terminate වීම හෝ garbage collector  එක මගින් application එකෙහි භාවිතා නොකරන ( reference නොමැති ) objects delete කරයි. Daemon thread යනු background එකෙහි run වන low priority thread එකක් වන අතර garbage collector එක daemon thread එකකට හොද නිදසුනක් වේ.


   ඉහත උදාහරණයේදී for loop එක run වන විට object 10000 ක් නිර්මාණය වුවද එම object reference නැවත භාවිතා නොකරන නිසා JVM එකෙහි memory space මදි වූ විට garbage collector පවතින objects delete කර අලුතෙන් object නිර්මාණය කිරීමට space ලබා දේ. 


    ඉහත උදාහරණයේදී for loop එක run වන විට නිර්මාණය වන සෑම object එකකම reference, object array එක තුල ගබඩා කර ගන්නා නිසා එම object garbage collector ට delete කල නොහැක. එම නිසා OutOfMemoryError  එකක් ලැබේ.

    Garbage collector එකෙන් reference නොමැති object delete කිරීමට මොහොතකට පෙර finalize() method එක run කරයි. එය Object class එකේ පවතින method එකකි.


    object එකක් නිර්මාණය වන විට constructor එක run වන අතර delete වීමට මොහොතකට පෙර finalize() method එක runවේ.

System.gc() method හා Runtime.getRuntime().gc() method එක මගින් අපිට පුළුවන් garbage collector හට run වීම සදහා request කරන්න. මෙම methods මගින් garbage collector අනිවාර්යෙන්ම run කරන බව guarantee කල නොහැක.


    සාමාන්‍යයෙන්, විදි 4 ක් අනුව object එකක් garbage collector හට eligible විය හැක.

1. Reference variable එක null කිරීම.


2. Object reference එකට වෙනත් object එකක් reassign කිරීම.



3. Local scope එකක් ( method / block එකක් ) තුල object එක නිර්මාණය කිරීම.



4. Inland of isolation මගින්. - object අතර link තබා ගනිමින් object පද්ධතියක් නිර්මාණය කර එම පද්ධතියට අදාලව එක reference variable එකක් පමණක් තිබෙන අවස්ථාවක එම reference variable එක null කිරීම.


අපි ඊලග ලිපියෙන් Java ගැන තවත් විස්තර ඉගෙන ගනිමු.

- චමෝදි -