Wpis z mikrobloga

@lifapek: Java zjada więcej pamięci, bo wykorzystuje intensywnie stertę, dorzucając do każdego obiektu bonusowe informacje, czego C++ nie robi. W C++ możesz spokojnie napisać bardzo duży program prawie nie wykorzystując sterty. Ponadto, w C++ usunięty obiekt zwalnia pamięć od razu, w Javie będzie istniał dopóki nie usunie go GC. Dodatkowo, ze względu na ten model pamięci, programiści Javy często w ogóle nie zwracają uwagi na jej użycie...

@xaxes: A, przepraszam,
@lifapek: to nie jest tak ze ze c++ zjada mniej pamieci ale garbage kolektor korzysta z algorytmow heurystycznych czasami czyli zgaduje kiedy ma sprzatnac obiekt. Czasami jest to zle, a czasami dziala calkiem dobrze. To ze nie ma w c++ garbage kolektora to nie znaczy ze jezyk jest gorszy. Dla mnie najwiekszy problem z java to #!$%@? konstrukcja samej aplikacji. Paczki, moduly, interfejsy ktorze trzeba zaimplementowac i ogrom gotowych klockow. W
@Wolfik1024: Pakiety i moduły IMO największa zaleta Javy : ). Przydałby się taki porządek w C++, dołączanie tekstowe plików jest koszmarnym archaizmem. Zapomniałeś przy tym że:

- musisz dołączyć do linkera obj albo lib'a który implementuje dany header,

- musisz zrobić to w określonej kolejności, bo dostaniesz nierozpoznane symbole,

- lib'y nie są przenośne między systemami..

W tym wypadku Java przypomina porządny system obiektowy, a C++ tragedię preprocesora w 17 aktach..
@losiul: niestety mam syndrom pierwszego jezyka. Uczylem sie najpierw C a potem C++ i teraz mam pisac gierke w javie i jestem jak dziecko we mgle. No ale coz java jest najpopularniejsza i bede musial ruszyc dupe i sie przemoc.
Java zjada więcej pamięci, bo wykorzystuje intensywnie stertę, dorzucając do każdego obiektu bonusowe informacje


@losiul: Jakie informacje? Z tego co rozumiem to java wrzuca wszystko na tą sterte(obiekty, zmienne) a co w takim razie robi C++ ? W powietrzu to trzyma? Jak to jest ?
@lifapek: Każdy obiekt w Javie ma podorzucane informacje o typie. W C++ nie, tylko klasy z metodami wirtualnymi dorzucają pointer do VTable. Dodatkowo, wirtualizowanie metod w Javie jest znacznie powszechniejsze niż w C++, bo dzieje się to z automatu i programista nie musi być nawet tego świadom, co rzecz jasna pogarsza sprawę. W C++ z kolei możesz po prostu tego nie robić, lub uciec od problemu szablonami. Do tego kompilator potrafi
@lifapek:

Sterta: obszar pamięci, na którym alokujesz obiekty. Ma te same problemy co dysk twardy, tzn, może ulec fragmentacji, bo pamięć może być zwalniana w dowolnej kolejności.

Stos: Kolejka LIFO, czyli masz gwarancję, że ostatni zaalokowany obiekt będzie zwolniony jako pierwszy, dopiero potem następne. Dzięki temu nie masz problemu fragmentacji i wszelkiej maści map "gdzie pamięć jest zaalokowana, a gdzie nie" - tutaj wystarczą Ci 2 wskaźniki (początku i końca stosu),
@lifapek: pytales gdzie przechowywac dane jesli nie na stercie, wiec odpowiadam w c++ w znacznie wiekszym stopniu wykorzystuje sie stos. Notabene do obiektow na stercie potrzebujesz adresow ktore i tak sa przechowywane na stosie. nie bezposrednie adresowanie rowniez powoduje pewien narzut (mozna sie sprzeczac czy istotny ale jenak)