eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Opowiadanie o GC
Ilość wypowiedzi w tym wątku: 79

  • 11. Data: 2009-07-27 10:27:22
    Temat: Re: Opowiadanie o GC
    Od: Krzysiek Kowaliczek <k...@g...com>

    Michal Kleczek wrote:
    > Krzysiek Kowaliczek wrote:
    >
    > [ciach]
    >> np.:
    >> struct Item
    [ciach]
    >>
    >
    > Ja chyba potrzebuje jasniej :)
    > Nadal nie widze tutaj pobierania obiektow Item z mapy.
    > Co robi mapa::getId() ?
    >

    Powiedzmy, że jest to globalny obiekt z dwoma
    funkcjami statycznymi getId, releaseId za którymi
    kryje się mapa :).

    Pozdrawiam
    KK


  • 12. Data: 2009-07-27 10:31:09
    Temat: Re: Opowiadanie o GC
    Od: Michal Kleczek <k...@g...com>

    Krzysiek Kowaliczek wrote:

    [ciach]
    >
    > Powiedzmy, że jest to globalny obiekt z dwoma
    > funkcjami statycznymi getId, releaseId za którymi
    > kryje się mapa :).
    >

    Prosze...
    Wezmy scenariusz:
    1. mamy sobie mape long->Item
    2. przychodzi komunikat
    3. parsujemy komunikat i odczytujemy id obiektu ktorego dotyczy
    4. musimy w mapie znalezc obiekt odpowiadajacy temu id
    5. jezeli program nie trzyma (poza mapa) referencji do danego obiektu -
    musimy usunac mapowanie z mapy

    Moge zobaczyc ten kod w cpp?

    --
    Michal


  • 13. Data: 2009-07-27 10:44:42
    Temat: Re: Opowiadanie o GC
    Od: Krzysiek Kowaliczek <k...@g...com>

    Michal Kleczek wrote:
    > Krzysiek Kowaliczek wrote:
    >
    > [ciach]
    >> Powiedzmy, że jest to globalny obiekt z dwoma
    >> funkcjami statycznymi getId, releaseId za którymi
    >> kryje się mapa :).
    >>
    >
    > Prosze...
    > Wezmy scenariusz:
    > 1. mamy sobie mape long->Item
    > 2. przychodzi komunikat
    > 3. parsujemy komunikat i odczytujemy id obiektu ktorego dotyczy
    > 4. musimy w mapie znalezc obiekt odpowiadajacy temu id
    > 5. jezeli program nie trzyma (poza mapa) referencji do danego obiektu -
    > musimy usunac mapowanie z mapy
    >

    Z dokładnością do tego, że należałoby przenieść
    definicje metod do .cpp, aby uniknąć cyklicznych zależności.

    struct mapa
    {
    static void setId ( Item& item )
    {
    int id = findFreeId ();
    map_.insert ( std::make_pair ( id, &item ) );
    }


    static void releaseId ( Item& item )
    {
    map_.erase ( item.id_ );
    }

    static Item* findItem ( int id )
    {
    std::map<int, Item*>::iterator it =
    map_.find ( id );
    if ( it != map_.end () )
    return it-> second;
    else
    return 0;
    }

    private:
    static std::map<int, Item*> map_;

    }

    struct Item
    {
    ~Item ()
    {
    mapa::releaseId ( *this );
    }

    Item ()
    {
    mapa::setId ( *this );
    }

    int id_;

    };

    I teraz niezależnie czy tworzymy obiekty na stosie
    czy alokujemy dynamicznie ( pod warunkiem, że go zwolnimy ),
    zawsze zadziała.

    Pozdrawiam
    KK


  • 14. Data: 2009-07-27 10:54:58
    Temat: Re: Opowiadanie o GC
    Od: Michal Kleczek <k...@g...com>

    Krzysiek Kowaliczek wrote:

    > Michal Kleczek wrote:
    >> Krzysiek Kowaliczek wrote:
    >>
    >> [ciach]
    >>> Powiedzmy, że jest to globalny obiekt z dwoma
    >>> funkcjami statycznymi getId, releaseId za którymi
    >>> kryje się mapa :).
    >>>
    >>
    >> Prosze...
    >> Wezmy scenariusz:
    >> 1. mamy sobie mape long->Item
    >> 2. przychodzi komunikat
    >> 3. parsujemy komunikat i odczytujemy id obiektu ktorego dotyczy
    >> 4. musimy w mapie znalezc obiekt odpowiadajacy temu id
    >> 5. jezeli program nie trzyma (poza mapa) referencji do danego obiektu -
    >> musimy usunac mapowanie z mapy
    >>
    >
    > Z dokładnością do tego, że należałoby przenieść
    > definicje metod do .cpp, aby uniknąć cyklicznych zależności.
    >
    > struct mapa
    > {
    > static void setId ( Item& item )
    > {
    > int id = findFreeId ();
    > map_.insert ( std::make_pair ( id, &item ) );
    > }
    >
    >
    > static void releaseId ( Item& item )
    > {
    > map_.erase ( item.id_ );
    > }
    >
    > static Item* findItem ( int id )
    > {
    > std::map<int, Item*>::iterator it =
    > map_.find ( id );
    > if ( it != map_.end () )
    > return it-> second;
    > else
    > return 0;
    > }
    >
    > private:
    > static std::map<int, Item*> map_;
    >
    > }
    >
    > struct Item
    > {
    > ~Item ()
    > {
    > mapa::releaseId ( *this );
    > }
    >
    > Item ()
    > {
    > mapa::setId ( *this );
    > }
    >
    > int id_;
    >
    > };
    >
    > I teraz niezależnie czy tworzymy obiekty na stosie
    > czy alokujemy dynamicznie ( pod warunkiem, że go zwolnimy ),
    > zawsze zadziała.

    Eee... dla mnie to kicha, bo nie mozna sobie na boku zapamietac (referencji
    do) obiektu Item ktorym jestem zainteresowany (np. na czas zycia okienka,
    ktore pokazuje dany Item - kazde takie okienko bedzie mialo swoja kopie lub
    wskaznik wskazujacy w kosmos).

    --
    Michal


  • 15. Data: 2009-07-27 11:19:52
    Temat: Re: Opowiadanie o GC
    Od: Krzysiek Kowaliczek <k...@g...com>

    Michal Kleczek wrote:

    > Eee... dla mnie to kicha, bo nie mozna sobie na boku zapamietac (referencji
    > do) obiektu Item ktorym jestem zainteresowany (np. na czas zycia okienka,
    > ktore pokazuje dany Item - kazde takie okienko bedzie mialo swoja kopie lub
    > wskaznik wskazujacy w kosmos).
    >

    Jak to nie można? Czas życia Item zależy od tego,
    kto tworzy ten obiekt. Dla alokacji na stosie będzie
    to zakres w którym obiekt żyje. Dla alokacji dynamicznej
    można użyć np.: "sprytnych wskaźników", które będą dzielone
    pomiędzy kilku użytkowników.

    Pozdrawiam
    KK


  • 16. Data: 2009-07-27 11:22:23
    Temat: Re: Opowiadanie o GC
    Od: Michal Kleczek <k...@g...com>

    Krzysiek Kowaliczek wrote:

    > Michal Kleczek wrote:
    >
    >> Eee... dla mnie to kicha, bo nie mozna sobie na boku zapamietac
    >> (referencji do) obiektu Item ktorym jestem zainteresowany (np. na czas
    >> zycia okienka, ktore pokazuje dany Item - kazde takie okienko bedzie
    >> mialo swoja kopie lub wskaznik wskazujacy w kosmos).
    >>
    >
    > Jak to nie można? Czas życia Item zależy od tego,
    > kto tworzy ten obiekt. Dla alokacji na stosie będzie
    > to zakres w którym obiekt żyje. Dla alokacji dynamicznej
    > można użyć np.: "sprytnych wskaźników", które będą dzielone
    > pomiędzy kilku użytkowników.
    >

    :)
    Na poczatku wlasnie pytalem o kawalek kodu w cpp, ktory robi to _bez_ uzycia
    smart pointerow - ktore defacto sa namiastka GC.

    --
    Michal


  • 17. Data: 2009-07-27 11:29:52
    Temat: Re: Opowiadanie o GC
    Od: Krzysiek Kowaliczek <k...@g...com>

    Michal Kleczek wrote:
    > :)
    > Na poczatku wlasnie pytalem o kawalek kodu w cpp, ktory robi to _bez_ uzycia
    > smart pointerow - ktore defacto sa namiastka GC.
    >

    Wcale nie musisz używać "sprytnych wskaźników", np.:
    zapamiętujesz obiekty Item w liście, wyświetlasz okna
    lub inaczej "cudujesz" z obiektami Item. Po przetwarzaniu
    usuwasz obiekty z listy.

    Pozdrawiam
    KK


  • 18. Data: 2009-07-27 11:30:43
    Temat: Re: Opowiadanie o GC
    Od: Maciej Sobczak <s...@g...com>

    On 27 Lip, 11:30, Jacek Czerwinski <x...@...z.pl> wrote:

    > 1. Eclipse SWT [...]
    > Obiekty pierwszego poziomu trzeba niestety dispose() czyli plus/minus
    > close()
    >
    > Nie wyczułem jednak w twoim 'opowiadaniu' relacji rodzicielskich.

    Bo ich nie ma a w szczególności to właśnie Item jest rodzicem.

    > 2. Inna idea Spring JDBC odnośnie często źle zwalnianych zasobów
    > (bazodanowych), zamyka je w przedział czasu.

    Nie różni się to niczym od tego, co mam z wątkiem czyszczącym.

    > 3. Trzecia idea, też z baz. Pule.

    Tak naprawdę to bazy danych nie są w żaden sposób szczególne. Systemy
    bazodanowe też są systemami rozproszonymi i ostatecznie wszystkie
    problemy z zarządzaniem czegokolwiek są tam do siebie podobne - i mają
    podobne rozwiązania.

    --
    Maciej Sobczak * www.msobczak.com * www.inspirel.com


  • 19. Data: 2009-07-27 11:32:56
    Temat: Re: Opowiadanie o GC
    Od: Michal Kleczek <k...@g...com>

    Krzysiek Kowaliczek wrote:

    > Michal Kleczek wrote:
    >> :)
    >> Na poczatku wlasnie pytalem o kawalek kodu w cpp, ktory robi to _bez_
    >> uzycia smart pointerow - ktore defacto sa namiastka GC.
    >>
    >
    > Wcale nie musisz używać "sprytnych wskaźników", np.:
    > zapamiętujesz obiekty Item w liście, wyświetlasz okna
    > lub inaczej "cudujesz" z obiektami Item. Po przetwarzaniu
    > usuwasz obiekty z listy.
    >

    A skad wiesz _kiedy_ mozna juz usunac Item z listy?

    --
    Michal


  • 20. Data: 2009-07-27 11:37:40
    Temat: Re: Opowiadanie o GC
    Od: Maciej Sobczak <s...@g...com>

    On 27 Lip, 12:09, Michal Kleczek <k...@g...com> wrote:

    > > Nie trzeba watku skanujacego - wystarczy usuwajacy. Od skanowania jest
    > > java.lang.ref.ReferenceQueue
    >
    > Sprobuj moze jakos tak:

    [...]

    Tak, to wygląda ciekawie. W moim przypadku mogłoby to być nawet trochę
    prostsze, ale rdzeń rozwiązania pasuje do problemu. Dziękuję za
    pomysł.

    --
    Maciej Sobczak * www.msobczak.com * www.inspirel.com

strony : 1 . [ 2 ] . 3 ... 8


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: