W trakcie pisania naszła mnie taka myśl, żeby o to zapytać. Trochę temat o niczym, bo wszystko zależy od przypadku, ale ciekaw jestem jak wy robicie. A i w sumie nigdy nikogo o to nie pytałem.
Android
Przykładowo, mam klasę dziedzicząca po **Thread ** i zajmującą się wywoływaniem aktualizowania informacji i rysowaniem stanu aplikacji w czasie rzeczywistym. Czyli, posiada typowe:
@Override
public void run()
{
while (running)
{
startTime = System.nanoTime();
canvas = null;
//funkcja zajmująca się rysowaniem **( seria lock canvas-> update oraz draw -> unlock canvas)**
drawAndUpdateCanvas();
//czas jaki zajęło wykonanie tych czynności
timeTaken = (System.nanoTime() - startTime)/1000000;
//opcjonalnie, uśpij aplikację, żeby osiągnąć pożądaną wartość FPS
setAppSleep();
}
}
Metody wywoływane operują na jakichś zmiennych, nieważne jakich ( w powyższym kodzie, zmienne utworzone w definicji klasy, nie w tej pętli).
Powyższe to tylko przykład.
Pytanie 1: co byłoby lepszym rozwiązaniem?
- Utworzenie zmiennych używanych w metodach w trakcie tworzenia instancji klasy ( + ewentualna inicjacja) i nadpisywanie ich?
public class MainThread extends Thread
{
zmienna A;
zmienna B;
zmienna C; itp
<jakieś metody operujące tymi zmiennymi>
}
- Tworzenie ich **lokalnie ** wewnątrz pętli, i przekazywanie do metod, i zbieranie przez GC?
while (running)
{
zmienna A = cośtam;
zmienna B = cośtam;
drawAndUpdateCanvas(A, B);
}
Pytam w kontekście klasy Thread, gdzie while będzie wywoływane cały czas.
Pytanie 2: Co jest dla was granicą rozdzielającą tworzenie zmiennych całkowicie lokalnie, wewnątrz pętli/metod itd.
Pytanie 3: Co jest bardziej kosztowne w kontekście JAVA: tworzenie zmiennych lokalnie za każdym razem i zbieranie tego później przez GC, czy utworzenie ich z instancją klasy i "nadpisywanie" ich w zależności od potrzeb.
Na wszystkie pytania pewnie udzieliłbym właściwych odpowiedzi, ale może dowiem się czegoś nowego albo ktoś rzuci jakieś inne spojrzenie na ten temat.