Wpis z mikrobloga

Ciężko porównać te języki. Inne zastosowania. Ale ogólnie Java wygodniejsza od C++, pomimo tego, że C++ ostatnimi czasy próbuję nadgonić to i tak dużo trudniej sobie strzelić w stopę pisząc w Javie, aniżeli w C++. Dla przypomnienia :Linus Torvalds on C++
- mniejsza ilość chybień cache'u (elementy w tablicach ustawione liniowo w pamięci)


@afe1: a w c++ nie? czy myślimy o czymś innym? o jaką dokładnie liniowość ci chodzi?
czy mi się wydaje, czy jesteś pierwszą osobą, która chce konkurować javą z c++ w kwestii zarządzania pamięcią? ( ͡° ͜ʖ ͡°)
@xrbartek: Źle postawione pytanie. Bo sam język to nie tylko, trzeba doliczyć biblioteki i frameworki. Dodatkowo C++ i Java znacząco się różnią pod maską w wyniku czego nadają się do innych rzeczy.
Widzisz, życie w assembly to potworny ból egzystencjalny, z którego urodziły się języki wysokiego poziomu.


@Lukasz1985 Kiedyś programowanie w assemblerze, c i c++ też było dla mnie fajne. Teraz dla mnie to taki sam ból egzystencjonalny. Do języków wysokiego poziomu się dorasta ;).

Poza tym wydajność javy jest przybliżona do tej c++. Tylko, że programy w JVM-ie startują i rozkręcają się dużo dłużej, stąd niechęć użytkowników do nich.
Poza tym wydajność javy jest przybliżona do tej c++. Tylko, że programy w JVM-ie startują i rozkręcają się dużo dłużej, stąd niechęć użytkowników do nich.

@archlinuxuser: Nieprawda. W rzeczywistości wydajność Javy jest znacznie mniejsza niż C++, a różnica rośnie wraz z rozwojem procesorów, które coraz lepiej przewidują kod kompilowany i coraz lepiej dobierają do niego zawartość cache.
@lukasz1985m @ly000 Java ma GC, który robi memory compaction, więc przemieszcza i reorganizuje te obiekty w pamięci tak, aby te należące np do jednej ArrayList byly obok siebie, wiec prawdopodobnie w tym samym cachline.

kolejna sprawa, pytanie: mamy dostępne 16bajtów pamięci. Alokujemy 5 obiektów o rozmiarze 3 bajty, potem usuwamy co drugi z nich. Następnie chcemy zaalokowac obiekty o rozmiarze 4 bajty. Co się stanie w C+++ a co w Javie?

@
kolejna sprawa, pytanie: mamy dostępne 16bajtów pamięci. Alokujemy 5 obiektów o rozmiarze 3 bajty, potem usuwamy co drugi z nich. Następnie chcemy zaalokowac obiekty o rozmiarze 4 bajty. Co się stanie w C+++ a co w Javie?

@afe1: W Javie nie zaalokujesz 5 obiektów o rozmiarze 3 bajtów w 16 bajtach pamięci, bo minimalny rozmiar obiektów w 64-bitowej JVM to 16 bajtów. ;)
W C++ Ci się uda, ale oczywiście, nastąpi
@afe1: w c++ nie tworzy się każdego obiektu dynamicznie i generalnie się tego unika. używa się RAII patterna i statycznej polimorfii tam gdzie się da.
@Ginden: źle dobralem liczby i dodatkowo alignment nie wzialem pod uwage :) ale chyba wiesz o co mi chodzilo. Wezmy wiec odpowiednio wieksze obiekty, perfectly aligned do 8 bajtow, tak ze nie ma pustych przestrzeni miedzy jednym a drugim. W c++ się nie uda krok drugi, w javie się pamięć skompaktuje i mozesz alokować dalej. W c++ się robi sito, potem brak pamieci, tak?. Java wins.

@ly000: nie programowalem w
@afe1: akurat, z tego co wiem, javowe standardowe biblioteki nie są najlepsze w kwestii zarządzania pamięcią. dlatego gdy tworzy się krytyczny, low-latency kod w javie, to unika się ich stosowania. jvm przez "per thread area" musi alokować masę pamięci, której nie używa. taki clion, napisane w javie, #!$%@? 800mb za samo otwarcie projektu. coś za coś. w c++ też można stworzyć ręcznie stertę dla wątku i potem ją zarządzać. efekt będzie
szablony są mocno rozbudowane. dzięki szablonom, kompilator jest w stanie wyprodukować bardzo wydajny program z relatywnie prostego kodu obiektowego

@ly000: Przez ile lat C++ nie mogło ogarnąć jak kompilować szablony? Nie wiem, czy już ogarnęło, czy nadal zalecane jest, by całość implementacji była w nagłówku... Szablony nie są niczym, czego nie dałoby się zrobić za pomocą rozbudowanego makra preprocesora.