eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingOpowiadanie o GCRe: Opowiadanie o GC
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!p
    ostnews.google.com!k6g2000yqn.googlegroups.com!not-for-mail
    From: Piotr Lipski <l...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Opowiadanie o GC
    Date: Tue, 4 Aug 2009 01:52:52 -0700 (PDT)
    Organization: http://groups.google.com
    Lines: 81
    Message-ID: <1...@k...googlegroups.com>
    References: <t...@4...com>
    <1...@2...googlegroups.com>
    <h4s021$8ca$1@mx1.internetia.pl>
    <n...@4...com>
    <h4s5hh$h68$1@mx1.internetia.pl>
    <b...@4...com>
    <h4saip$1bg$1@mx1.internetia.pl>
    <1...@4...com>
    <8...@o...googlegroups.com>
    <l...@4...com>
    <7...@n...googlegroups.com>
    <3...@k...googlegroups.com>
    <6...@r...googlegroups.com>
    NNTP-Posting-Host: 83.25.214.44
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Trace: posting.google.com 1249375972 15433 127.0.0.1 (4 Aug 2009 08:52:52 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Tue, 4 Aug 2009 08:52:52 +0000 (UTC)
    Complaints-To: g...@g...com
    Injection-Info: k6g2000yqn.googlegroups.com; posting-host=83.25.214.44;
    posting-account=3TlxoAoAAABULs0oP0Nw6j6Ph_3b_y9Z
    User-Agent: G2/1.0
    X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5
    (KHTML, like Gecko) Chrome/2.0.172.37
    Safari/530.5,gzip(gfe),gzip(gfe)
    Xref: news-archive.icm.edu.pl pl.comp.programming:182989
    [ ukryj nagłówki ]

    > > Jak wół stoi:
    >
    > > "Like most collection classes, this class is not synchronized.
    >
    > Zabawa polega na tym, że to nie jest takie proste.
    >
    > Specyfikacja Javy (JLS) w rozdziale o wątkach a konkretnie o
    > współdzieleniu danych (17.4.1) pisze:
    >
    > "Two accesses to (reads of or writes to) the same variable are said to
    > be conflicting if at least one of the accesses is a write."

    Z taką właśnie sytuacją mamy tu do czynienia. Szczegóły dalej.

    > Czyli wiele wątków *czytających* te same dane nie stanowi problemu.
    > Można stworzyć jakąś wartość (ogólnie: *strukturę danych*), zapewnić
    > jej widoczność i bez problemu czytać ją z wielu wątków. To jest
    > gwarantowane przez specyfikację języka.
    > BTW - stąd właśnie bierze się eksponowanie pomysłu na klasy
    > "immutable" w książce, którą polecał A.L. - obiekty niezmienne mogą
    > być używane przez wiele wątków równocześnie nie dlatego, że jest w
    > nich jakaś magia, tylko właśnie dlatego, że wtedy nie ma
    > konfliktujących zapisów.

    Immutable ma się tu jak pięść do nosa. Sens istnienia WeakHashMap jest
    w zmienności -
    usuwane są z niej klucze, które GC zbierze.

    > Moje pytanie w pełnej wersji: czy get() w WeakHashMap jest operacją
    > modyfikującą? Jeżeli nie, to na mocy powyższego paragrafu można wołać
    > get() z różnych wątków (i w szczególności ReadWriteLock można użyć do
    > synchronizacji, wbrew temu, co twierdził A.L.).
    >
    > *To* jest właśnie pytanie, któro tutaj zadałem.

    To czy get jest operacją modyfikującą jest szczegółem implementacji.

    Istotne jest, że w pewnym momencie jakiś obiekt zawarty w WeakHashMap
    jest "weakly reachable". Można więc "go" usunąć z mapy.
    Skąd wiadomo, że jest "weakly reachable"? - zaglądamy do dokumentacji
    WeakReference:

    "Suppose that the garbage collector determines at a certain point in
    time that an object is weakly reachable. [...] At the same time or at
    some later time it will enqueue those newly-cleared weak references
    that are registered with reference queues."

    Jeśli obiekt jest "weakly reachable" to obiekt weak reference, który
    go zawija trafia do kolejki (ReferenceQueue). Sprawdzamy kolejkę -
    jeśli zawiera referencję to usuwamy je z mapy. Operacja usuwania może
    być przeprowadzona w wątku, który wywołał jakąś operację na mapie (tak
    się dzieje w przypadku java.util.WeakHashMap - wiem bo zajrzałem do
    źródeł) może też być zrealizowane w sposób, który pokazał Michal
    Kleczek - w odzielnym wątku "pollującym" kolejkę referencji.

    Zarówno w pierwszej jak i drugiej implementacji mamy modyfikację mapy
    w jednym wątku odczyt w drugim.

    [...]

    > Ale wtedy też będziemy mieli dwie opcje:
    > - uznać, że dokumentacja jest do dupy i nie opisuje rzeczywistości
    > - uznać, że implementacja jest do dupy i nie działa zgodnie ze
    > specyfikacją.
    >
    > Co byś wybrał?
    >

    Dokumentacja jest super. Ty jej nie doczytałeś ;-)

    PL

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: