Przypisywanie klasy do zmiennej powodem wykorzystywania dużej ilości pamięci?

Odpowiedz Nowy wątek
2012-09-04 19:47
0

Witam,
od jakiegoś czasu tworzę grę i ostatnio zauważyłem, że zajmuje ona stanowczo więcej pamięci (RAM) niż powinna.
Szukam więc przyczyny. Chyba ją znalazłem, ale muszę się upewnić ;)
Załóżmy, że w konstruktorze każdej klasy tworzę (jak to nazwać?) odwołanie do klasy głównej (w tym przypadku main):

Main main123;
public PrzykladowaKlasa1(Main main){
main123 = main;
}

I druga klasa:

 Main main123;
public PrzykladowaKlasa2(Main main){
main123 = main;
}

Jak widać w każdej klasie odwołuję się do klasy Main. (klasa Main wywołuje konstruktory, przesyłając swoją zawartość)
I jeśli tak zrobię, to pamięć zużywana przez funkcje w tej klasie się powieli? Tzn. jeśli klasa main zużywa 3 MB, ty jeśli tak zrobię, to łączna zajmowana pamięć będzie wynosiła 6 MB z hakiem?
Czy dobrze rozumiem, czy się zagmatwałem? :/
Z góry dziękuję i pozdrawiam.
PS: Wiem, że to kiepsko wytłumaczyłem, ale nie wiem jak to inaczej ująć.

Pozostało 580 znaków

2012-09-04 20:06
0

Nie, pamięć się 'nie powiela', trzymasz tylko referencję do tego obiektu.

edytowany 2x, ostatnio: airborn, 2012-09-05 09:18
Do obiektu, nie do klasy. - Shalom 2012-09-05 01:31
Tak, oczywiście. Dzięki, już poprawiam :) - airborn 2012-09-05 09:18

Pozostało 580 znaków

2012-09-05 14:17
0

Nie rozumiem tego: "klasa Main wywołuje konstruktory, przesyłając swoją zawartość".
Napisz co się dzieje bo może tu jest powód problemów.

Jeżeli chodzi o wycieki pamięci w Javie, to z definicji przyczyną są zbędne konstrukcje nowych obiektów i kolekcjonowanie ich referencji.
Czasem są to niezamierzone rekurencje, których efektem też są kolejne konstrukcje obiektów tymczasowych, które nie mogą zginąć lub pod-obiektów.


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?

Pozostało 580 znaków

2012-09-05 16:09
mućka
0

On ma na mysli cos takiego:

class Main {
void method() {
new Costam(this)
}
}

Też tak myślę, ale wolę się upewnić. Szczególnie w tym, co się dzieje z wartością wyrażeń/instrukcji "new Cośtam()". - Olamagato 2012-09-05 23:24

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