„Здрасти, Амиго!“
"Здравей, Ели. Имаш ли да ми кажеш нещо интересно?"
„Днес ще говорим за това колко дълго един обект остава в паметта, известен също като живот на обекта. След като обектът е създаден, той съществува (живее), докато поне една променлива съхранява своя address (има поне една препратка към него). Ако няма повече препратки, обектът умира. Ето няколко примера:"
public class MainClass
{
public static void main (String[] args)
{
┏ Tommy
┃ Cat cat = new Cat("Tommy");
┃ cat = null;
┗
┏ Sammy
┃ Cat cat1 = new Cat("Sammy");
┃┏ Missy
┃┃Cat cat2 = new Cat("Missy");
┃┃cat2 = cat1;
┃┗
┃┏ Ginger
┃┃cat1 = new Cat("Ginger");
┃┃cat2 = null;
┃┗
┗
}
}
„Обектът Tommy съществува само за един ред от създаването му. Единствената променлива, която препраща към обекта, е настроена на нула в следващия ред, така че обектът се унищожава от Java Virtual Machine (JVM).“
„Обектът Sammy се съхранява в променливата cat1 , след като е създаден. Или, по-точно, променливата съхранява препратка към него. Няколко реда по-късно тази препратка се копира в cat2 . След това препратка към друг обект се записва в cat1 . Сега само cat2 препраща към Sammy . И накрая, последната останала препратка към обекта е зададена на null в последния ред на главния метод."
„Обектът Missy съществува само за един ред след създаването му. В следващия ред променливата cat2 е зададена на друга стойност и препратката към Missy се губи. Обектът вече не може да бъде достъпен, така че се счита за боклук от система (т.е. обектът е мъртъв)."
„Веднъж създаден, обектът Ginger съществува до края на метода. В края на метода променливата cat2 се унищожава, като Ginger се унищожава веднага след това.“
"Виждам."
„Но ако създадем обект Cat вътре в метод и съхраним препратка към него в променлива на екземпляр, тогава обектът Cat ще съществува, докато към него се препраща друг обект, който все още е жив.“
„Всъщност даден обект обикновено не се унищожава незабавно от системата. Виртуалната машина на Java извършва „събиране на боклук“ от време на време, унищожавайки обекти, които са бor маркирани за изтриване. Повече за този процес по-късно.“
„И ако вече не искаме дадена променлива да препраща към обект, можем да я зададем на null or да й присвоим препратка към друг обект.“
GO TO FULL VERSION