[ Pobierz całość w formacie PDF ]
.3.8 Niszczenie obiektów zwalnianie pamięciBardzo istotnym zagadnieniem w rozważaniach nad pracą z obiektami jestproblem niszczenia obiektów.O ile tworzenie obiektów i ich inicjowanie za pomocąkonstruktora jest jawnie określone (instrukcja new), o tyle niszczenie obiektów izwalnianie przydzielonych im zasobów jest niejawne.W Javie nie istnieje operatordelete (C++) umożliwiający usunięcie obiekty, lub operator free (C ) zwalniający3-16Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 3Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA przydzieloną pamięć.Dlaczego? Dlatego, że wszystko w Javie dzieje siędynamicznie.Dynamicznie przydzielana jest pamięć obiektowi, dynamicznie jest więcteż zwalniana.Owa dynamiczność określa nic innego jak to, że programista niekontroluje dostępu do pamięci, tak więc nie wie gdzie Java umieszcza poszczególneobiekty.Obiekt będący w pamięci komputera jest dostępny dla użytkownika poprzez uchwyt. Uchwyt jest więc odniesieniem do obiektu i sprawia, że obiekt jestokreślony.Brak odniesienia do obiektu sprawia, że obiekt jest niewykorzystywany,tak więc Java może go zniszczyć, a co za tym idzie zwolnić pamięć.Niszczeniemobiektów i zwalanianiem pamięci zajmuje się w Javie proces działający w tle noszącynazwę GarbageCollection (czyli kolekcjoner śmieci).Obiekty bez referencji sąumieszczane w śmietniku a pamięć im przydzielona jest zwalniana najszybciej jakto jest możliwe (proces kolekcjonera śmieci posiada niski priorytet stąd zwrócenieprzydzielonej pamięci do systemu nie koniecznie odbędzie się natychmiastowo).Niewiadomo kiedy proces GarbageCollection dokonuje zwalniania pamięci i programistanie ma żadnej, bezpośredniej możliwości kontrolowania tego procesu.Przykład 3.9://Rozmiar.javaclass Rep{int x = 36;String wiad="Stan Republiki: ";String typ=" światów.";void stan(String s){System.out.println(wiad+s+typ);}void stan(int i){System.out.println(wiad+i+typ);}}// koniec class Reppublic class Rozmiar extends Rep{void stan(int i){i--;System.out.println("Republika skłąda się z "+i +" światów");}public static void main(String args[]){System.gc();Thread.currentThread().yield();long s1 = Runtime.getRuntime().freeMemory();System.out.println("Test rozmiaru1: "+s1+ " lat św.(3)");long s2 = Runtime.getRuntime().freeMemory();System.out.println("Test rozmiaru2: "+s2+ " lat św.(3)");long stan1 = Runtime.getRuntime().freeMemory();System.out.println("Test rozmiaru3: "+stan1+ " lat św.(3) \n");Rozmiar[] r = new Rozmiar[10000];long stan2 = Runtime.getRuntime().freeMemory();System.out.println("Zadeklarowano 10000 obiektów, rozmiar: "+stan2+" lat św.(3)");3-17Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 3Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA for ( int i =0; i [ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl odbijak.htw.pl
.3.8 Niszczenie obiektów zwalnianie pamięciBardzo istotnym zagadnieniem w rozważaniach nad pracą z obiektami jestproblem niszczenia obiektów.O ile tworzenie obiektów i ich inicjowanie za pomocąkonstruktora jest jawnie określone (instrukcja new), o tyle niszczenie obiektów izwalnianie przydzielonych im zasobów jest niejawne.W Javie nie istnieje operatordelete (C++) umożliwiający usunięcie obiekty, lub operator free (C ) zwalniający3-16Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 3Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA przydzieloną pamięć.Dlaczego? Dlatego, że wszystko w Javie dzieje siędynamicznie.Dynamicznie przydzielana jest pamięć obiektowi, dynamicznie jest więcteż zwalniana.Owa dynamiczność określa nic innego jak to, że programista niekontroluje dostępu do pamięci, tak więc nie wie gdzie Java umieszcza poszczególneobiekty.Obiekt będący w pamięci komputera jest dostępny dla użytkownika poprzez uchwyt. Uchwyt jest więc odniesieniem do obiektu i sprawia, że obiekt jestokreślony.Brak odniesienia do obiektu sprawia, że obiekt jest niewykorzystywany,tak więc Java może go zniszczyć, a co za tym idzie zwolnić pamięć.Niszczeniemobiektów i zwalanianiem pamięci zajmuje się w Javie proces działający w tle noszącynazwę GarbageCollection (czyli kolekcjoner śmieci).Obiekty bez referencji sąumieszczane w śmietniku a pamięć im przydzielona jest zwalniana najszybciej jakto jest możliwe (proces kolekcjonera śmieci posiada niski priorytet stąd zwrócenieprzydzielonej pamięci do systemu nie koniecznie odbędzie się natychmiastowo).Niewiadomo kiedy proces GarbageCollection dokonuje zwalniania pamięci i programistanie ma żadnej, bezpośredniej możliwości kontrolowania tego procesu.Przykład 3.9://Rozmiar.javaclass Rep{int x = 36;String wiad="Stan Republiki: ";String typ=" światów.";void stan(String s){System.out.println(wiad+s+typ);}void stan(int i){System.out.println(wiad+i+typ);}}// koniec class Reppublic class Rozmiar extends Rep{void stan(int i){i--;System.out.println("Republika skłąda się z "+i +" światów");}public static void main(String args[]){System.gc();Thread.currentThread().yield();long s1 = Runtime.getRuntime().freeMemory();System.out.println("Test rozmiaru1: "+s1+ " lat św.(3)");long s2 = Runtime.getRuntime().freeMemory();System.out.println("Test rozmiaru2: "+s2+ " lat św.(3)");long stan1 = Runtime.getRuntime().freeMemory();System.out.println("Test rozmiaru3: "+stan1+ " lat św.(3) \n");Rozmiar[] r = new Rozmiar[10000];long stan2 = Runtime.getRuntime().freeMemory();System.out.println("Zadeklarowano 10000 obiektów, rozmiar: "+stan2+" lat św.(3)");3-17Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 3Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA for ( int i =0; i [ Pobierz całość w formacie PDF ]