Dobra praktyka w używaniu zmiennych

0

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?

  1. 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>
}
  1. 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.

0
  1. jak potrzebuje zmienną w kilku metodach (różnych miejscach kodu), to na poziomie klasy
    jak nie potrzebuje zmiennej nigdzie indziej to na poziomie metody/pętli
  2. j/w
  3. To jest ciekawy temat i trzeba by trochę posiedzieć z GC, żeby mieć "czuja" co się bardziej opłaca. Tak na chłopski rozum, lepiej żeby GC posprzątało zaraz po skończeniu jakiejś metody, niż żeby zmienne wisiały do zakończenia programu. A co jeśli aplikacja webowa ma działać cały czas? To takie zmienne też mają wisieć? A jak będzie tysiąc wywołań danej metody i zmienne nie zostały posprzątane? Tyle pytań, tak mało odpowiedzi.

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