usuwanie tablicy z pamięci w trakcie działania programu...

Odpowiedz Nowy wątek
2011-07-22 09:54
0

jak wyżej...

Chodzi o to że mam aplikacje okienkową (desktopową). W okienku klikam przycisk i wyświetla mi się drugie okienko...W tym drugim okienku tworzę tablicę(nie wizualnie :) ). Chciałbym żeby po zamknięciu tego drugiego okienka ta tablica znikała z pamięci. Jak mozna ją usunąć? Moje drugie pytanie to: Obiekty umieszczane są na stercie w pamięci...Czyli tablice typu int[] a = new int[%]; rówież się tam znajdują?

pozdr.

Pozostało 580 znaków

2011-07-22 10:01
0

Java sobie sama poradzi z takimi obiektami za pomocą GC, wystarczy że tablica wyjdzie z zasięgu.
W Javie prawie wszystkie dane są na stercie (nie dotyczy to oczywiście takich rzeczy które zawsze leżą na stosie jak adresy zwrotne po wywołaniu metody itd).

Pozostało 580 znaków

2011-07-22 18:19
0

może ten kawałek kodu:

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
a = null;
}
});


Każdy programista przybywający z innego miasta jest fachowcem.

Pozostało 580 znaków

2011-07-22 18:54
0

pomogło...:)
dziękować :)

Dlaczego bez wyzerowania tablicy , gdy chcę uruchomić po raz drugi to okno(co jest równe ponownym zapisem do tablicy ), wywala java cheap space. Przecież zapisuje nowe dane do tej samej tablicy..Ta tablica od razu mówię że jest dosyć duża(kilka milionów indexów).

edytowany 1x, ostatnio: remigio, 2011-07-22 19:08

Pozostało 580 znaków

2011-07-22 19:27
::.
0

Musisz pokazac kod. Mozliwe ze np gdy tworzysz nowa tablice trzymasz jeszcze stara, i na 2 nie styka juz miejsca.

Pozostało 580 znaków

2011-07-22 19:50
0

Spróbuj wykonać
System.gc();
po wyzerowaniu tablicy może coś pomoże :)


Każdy programista przybywający z innego miasta jest fachowcem.

Pozostało 580 znaków

2011-07-23 16:41
0

wywołanie garbage collector nic nie dawało...Dopiero przy ustawieniu tej tablicy na wartość null (gdy opuszcamy okno), zadziałało. Kodu nie ma sensu wstawiać bo musiałbym "obcinać" kod co byłoby baardzo żmudne... Ważne że zachulało i dzięki wam za to :)

::. napisał(a)

Mozliwe ze np gdy tworzysz nowa tablice trzymasz jeszcze stara, i na 2 nie styka juz miejsca.

Faktycznie może o to chodzić...Tablica która jest w pamięci toche jej zajmuje...Otwierając ponownie okno, tworzę tablicę od nowa, która też waży swoje...
A jak to będzie z tą pamięcią...Jeżeli podczas działania aplikacji alokuje pamięć dla tablicy a później, alokuje ponownie pamięć dla tablicy o tej samej nazwie(oczywiście mówię tu o użyciu operatora new), to pamięć będzie przydzielona na miejsce tej poprzedniej czy zostanie stworzone dodatkowe miejsce? Czy w ogóle Java zorientuje się że ma już na stercie taką tablicę? A jeżeli się zorientuje to jak się zachowa?

Dzięki za help...

pozdr.

edytowany 1x, ostatnio: remigio, 2011-07-23 16:59

Pozostało 580 znaków

2011-07-26 15:35
0

A nie robisz aby czegoś takiego:

 
class MojaKlasa {
  private int[] bardzoDuzaTablica;
 
  public otworzOkienko() {
     bardzoDuzaTablica = new ... // stworzenie bardzo dużej tablicy i wypełnienie danymi
     //...
  }
 
}

?

Przy takim kodzie przy drugim wywołaniu funkcji otworzOkienko, jeśli nie wynullujesz referencji do bardzoDuzaTablica, to przez moment masz w pamięci 2 tablice.
GC nie może usunąć pamięci po starej tablicy dopóki nie nastąpi przypisanie do nowej, a przypisanie owo nastąpić musi po alokacji nowej tablicy, czyli przez moment muszą być dwie. Wynullowanie tablicy po zamknięciu okienka jest bardzo dobrym rozwiązaniem, a jeszcze lepszym zorganizowanie struktury klas tak, aby obiekty klasy MojaKlasa miała czas życia taki sam jak okienka (tj. wychodziły z zasięgu po zamknięciu okienka).

Co do pytania o to, czy Java ponownie używa tej samej pamięci, to jeśli nową tablicę zaalokujesz po tym jak GC posprząta, to pamięć po starej tablicy zostanie ponownie użyta.

edytowany 1x, ostatnio: Krolik, 2011-07-26 15:37

Pozostało 580 znaków

2011-07-26 17:26
::.
0
Krolik napisał(a)

Przy takim kodzie przy drugim wywołaniu funkcji otworzOkienko, jeśli nie wynullujesz referencji do bardzoDuzaTablica, to przez moment masz w pamięci 2 tablice.

Jak juz wczesniej napisano ;d

Pozostało 580 znaków

2011-07-26 20:35
0

No właśnie starałem się uważać aby nie "dublować" tablic...Po umieszczeniu paru null'i z pamięcią nie ma już problemu...Zresztą mój błąd również polegał na tym, że za dużo niepotrzebnych informacji chciałem umieszczać w tablicach :)

Dzięki za pomoc :)

Pozostało 580 znaków

2011-10-28 11:24
0

Czy przypisywanie w pętli null'i do wszystkich elementów tablicy (i jej samej) może okazać się szybszą metodą zwolnienia zasobów niż pozostawienie tego do sprawdzenia GC?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0