Article View: pl.comp.objects
Article #4975Re: Glos na temat Javy
From: Sektor van Skijlen
Date: Thu, 18 Feb 1999 16:10
Date: Thu, 18 Feb 1999 16:10
79 lines
4490 bytes
4490 bytes
W ostatnim odcinku, mmoscick@friko.onet.pl naskrobal:
: Mianowicie mialem klopoty z pamiecia. Musze dosc czesto ja przydzielac lub
: zwalniac i w pewnym momencie okazalo sie ze podczas wykonywania
: programu bardzo szybko znika duza ilosc pamieci. Ze wzgledu na wielkosc
: kodu jak i skromne doswiadczenie (jestem na 4 roku studiow) znalezienie
: bledu zajelo mi troche czasu. W pewnym miejscu przydzielalem pamiec dla
: zmiennej ktora juz miala przydzielona pamiec. Zapomnialem ja wczesniej
: zwolnic.
Moze i znany problem, tylko gdybys od samego poczatku mial w glowie gotowy
projekt i programowal to stopniowo od pewnych szczegolow, to moze uniknalbys
bledu. Mozesz tez oczywiscie pomoc sobie klasa auto_ptr (nie to samo, co GC,
ale zawsze).
: Gdyby program byl pisany w Javie to powyzszy problem by nie wystapil i
: automatycznie czas tworzenia programu bylby krotszy a to oznacza mniejsze
: koszty.
: Czy nie jest to argument na korzysc Javy.
Mozliwe, ale podobnie moznaby wysunac wiele bardziej znaczacych argumentow na
korzysc C++. Poza tym:
- sa GC rowniez dla C++
- uzywanie GC powoduje narzuty, czesto nie rekompensujace zysku na
programowaniu
- Java nie jest jedynym jezykiem, uzywajacym GC
Zas na temat GC najlepiej sie swego czasu wypowiedzial na tej grupie p. Janusz
Stopa (mam nadzieje, ze sie nie obrazi, ze zacytuje pare fragmentow):
-----
Ja tez kiedys bylem zafascynowany GC. Ale mi przeszlo. Jest tak
jak ze wszystkim w zyciu: cos za cos.
GC jest idealne do programow w stylu "Hello World". A poza tym w
bardziej skomplikowanych programach udalo mi sie zrobic wszystko,
co "potrafie" tez zrobic w C++. Zawiesic program, "wyczerpac" pamiec,
rzucic kora (a raczej "unexpected" exception), plus wiele innych.
Co gorsza, naprawienie tego jest duzo trudniejsze niz w C++ bo nie
widac szczegolow (skad wiadomo, co np. i kiedy dokladnie zrobi GC?).
Czy wobec tego GC jest do niczego? Nie! Ale za wygode sie placi.
A oto kilka konkretow:
1. Alokacja przez "new" jest (wg ksaizki Lakosza) ok. 100x wolniejsza
niz zmienne automatyczne na stosie.
2. W programach wielowatkowych- a raczej tylko takie sa obecnie
w modzie ;-) -dostep do sterty (heap) jest zwykle synchronizowany.
A wiec przy niefortunnym zbiegu okolicznosci nasz program moze byc
dodatkowo kilkaset razy wolniejszy niz powinien. Skad GC ma latwo
zgadnac co zrobic?
3. GC ze wzgledu na detekcje cykli nie jest takie latwe -tzn.
czesto bardzo czasochlonne.
4. GC zwalnia obiekt w blizej niesprecyzowanym momencie.
Pamiec nie jest jedynym zasobem. Polaczenia, zbiory, licencje, itd.
tez. Na tym ostatnim nie przespalem nocy, bo moj program
w Javie nagle zabieral wiecej licencji do pewnego pakietu niz
bylo dostepne. Mozna np. zastosowac recznie java.lang.System.gc()
ale czym to sie rozni od delete w C++?
5. Gdy GC jest robiony w innym watku (a tak sie czesto zdarza) i
gdy odpowiednio szybko generujemy nowe obiekty, to po niedlugim
czasie program padnie na braku pamieci. Moze to wcale nie wyjsc
w czasie testowania a dopiero gdy program dziala od pol roku u
klienta. Ale niezawodnosc!
... i tak mozna by bylo ciagnac dalej. Oczywiscie, producenci twierdza
ze juz wkrotce na pewno beda odpowiednie optymalizatory i wogole
cuda. Tak, tak. Bajery, rowery...
-----
Oczywiscie nie moge sie wypowiedziec sam ntt., gdyz nie uzywam na razie Javy i
nie mam z nia zadnego doswiadczenia. Potrafie sobie jednak wyobrazic, jakie
narzuty moga powodowac niektore takie wlasnie "bajery".
Pozdrawiam,
--
... Win tarquen yre aubenk aerden jen backieten
Fer napern ta seimen eim van yre broust...
... Michal 'Sektor' Malecki <mmalecki@technologist.com>
... Politechnika (jeszcze) Lodzka, Elektrotechnika/Informatyka Stosowana
Technical Details
Message-ID:
<7ahe25$fk4$3@polonez.man.lodz.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!paa.gov.pl!news.swierk.pl!news.icm.edu.pl!news.man.poznan.pl!news.man.lodz.pl!not-for-mailReferences:
<0328a2336221129CIERNIK@ciernik.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!paa.gov.pl!news.swierk.pl!news.icm.edu.pl!news.man.poznan.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <sektor@spam.org>
Newsgroups: pl.comp.objects
Subject: Re: Glos na temat Javy
Date: 18 Feb 1999 16:10:45 GMT
Organization: Metropolitan Area Network in Lodzi
Lines: 79
Message-ID: <7ahe25$fk4$3@polonez.man.lodz.pl>
References: <0328a2336221129CIERNIK@ciernik.onet.pl>
NNTP-Posting-Host: zly.kis.p.lodz.pl
User-Agent: tin/pre-1.4-981225 ("Volcane") (UNIX) (SunOS/5.5.1 (i86pc))
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit