Autor Wątek: Java - w czym problem?  (Przeczytany 7736 razy)

Offline vashpan

  • Użytkownik
    • Strona

# Lipiec 11, 2012, 21:31:53
Dynax plecie glupotki ;) Jest to normalny natywny kod maszynowy ARM wykonywany przez procesor. Ze wzgledu na architekture systemu czasem po prostu trzeba troche z poczatku Javy uzyc zeby zrobic pare rzeczy.

Asmodeusz: Ja pracuje w firmie ktora zajmuje sie w duzej mierze portowaniem i tworzeniem gier na Androida i 90% tych gier ( a sa to gry z Top100, praktycznie wszystkie. Duzi klienci ) jest napisana w C++. Ale jakos specjalnie to o niczym nie swiadczy, wynika to glownie z tego ze wiekszosc tych aplikacji bylo pisanych na poczatku na iOS ( albo inne systemy )

No wlasnie, dochodzimy do kolejnej rzeczy, Java... nie jest przenosna. Nie jest przenosna w sensie gier... Ze wszystkich istotnych platform dla gier ( Windows, XBox 360, PS3, iOS, Android, Mac OS X ) Java jest dostepna na 3... A na 1 ( Android ) nie w tej formie co na 2 pozostalych ( J2SE ) Jedynym przenosnym w tym kontekscie jezykiem jest C/C++, tym bardziej ze napisano juz w nim ogrom silnikow i frameworkow. ( + ogromne silniki jak Unity  i UE3 )


Co do powolnosci, Java jest powolna i zasobozerna. Tak samo jak C#, i nie mam Javy sprzed 10 lat.... Runtime na takim poziomie abstrakcji po prostu kosztuje. Nie ma tutaj co zaklinac rzeczywistosci. Czy winni sa w duzej mierze marni programisci ? Byc moze... Wiele aplikacji przez to jest po prostu kosmicznie niestabilna i jest wrecz synonimem "syfu" dla przecietnych userow. Z drugiej strony mamy zastosowania serwerowe, gdzie dla mnie np. Java jest naturalnym wyborem ze wzgledu na koniecznosc dlugiego dzialania ( duzo mniejsze prawdopodobienstwo leakow )
« Ostatnia zmiana: Lipiec 11, 2012, 21:36:35 wysłana przez vashpan »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Avaj

  • Użytkownik

# Lipiec 11, 2012, 22:00:27
@up a to? http://code.google.com/p/libgdx/ jest napisane, że Android i HTML5 a jak HTML5 to wszystko :)

Offline Xion

  • Moderator
    • xion.log

  • +1
# Lipiec 11, 2012, 22:05:03
Cytuj
nie pisz, że Javy tylko Dalvika bo jeszcze ci Oracle proces wytoczy :)
Spoko, Oracle już jeden taki proces przegrało :)

Cytuj
Na Androida można pisać w C++ i Javie, podejrzewam że kilkadziesiąt procent z top100 gier na system Google jest napisana bez linijki kodu w C++.
Na pewno nie i prawdopodobnie nigdy tak nie będzie. Powodem jest iOS; nawet jeśli mówimy o grze targetowanej wpierw na Androida (a takich pewnie będzie coraz więcej), to i tak port iOS-owy jest wciąż bardzo pożądaną sprawą, więc C++ pozostaje naturalnym wyborem.

Cytuj
Jeśli chodzi o wydajność, warto pamiętać, że optymalizacja w przypadku rozwiązań wysokopoziomowych opiera się na trochę innych zasadach, niż przy korzystaniu z rozwiązań natywnych. Ważne są m.in. odpowiednie rozmieszczenie alokacji, ręczne wywoływanie GC (jeśli to możliwe), równomierne zużywanie pamięci (GC może uruchamiać się w małych cyklach) i dobry dobór algorytmów.
+1. Na różnych poziomach abstrakcji potrzebne są zupełnie inne techniki optymalizacyjne. <plug>To mi przypomina, że powinienem w końcu napisać artykuł o optymalizacji Pythona - tam to dopiero są niespodziewane triki :)</plug>

Cytuj
Co do powolnosci, Java jest powolna i zasobozerna. Tak samo jak C#, i nie mam Javy sprzed 10 lat.... Runtime na takim poziomie abstrakcji po prostu kosztuje. Nie ma tutaj co zaklinac rzeczywistosci. Czy winni sa w duzej mierze marni programisci ? (...)
Polecam przyjrzenie się googlowemu benchmarkowi szybkości języków: http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php . Wniosek z niego jest taki, że C++ rzeczywiście jest najszybszy, ale osiągnięcie maksymalnego poziomu wydajności jest o wiele trudniejsze niż w innych językach. W Javie to zapewne łatwiejsze, ale może prawdą jest że przyciągana ona, ahem, mniej utalentowanych programistów :)

(Drugi wniosek z tego benchmarku? OMG idę się uczyć Scali :))

Cytuj
Swoją drogą, słyszałem nawet, że Notch się właśnie na Minecrafcie uczył w Javie pisać.
Rety, żeby moje hello worldy tak się  sprzedawały...

Offline alexsoft

  • Użytkownik

# Lipiec 11, 2012, 22:33:00
A ja z kolei daje sobie reke uciac, ze wiekszosc gier w top100 to Marmolada, bo zalatwiamy wiekszosc platform za jednym zamachem.

Offline Liosan

  • Redaktor

# Lipiec 11, 2012, 22:42:23
Z tego co słyszę tu i ówdzie, Minecraft jest wręcz przysłowiowo wolny i zasobożerny. Nie tyle z powodu Javy - bo to obecne jeden z najszybszych języków w ogóle - co różnych, nazwijmy to, dziwnych decyzji inżynierskich ;)
Mógłbym prosić o jakieś linki?

<plug>To mi przypomina, że powinienem w końcu napisać artykuł o optymalizacji Pythona - tam to dopiero są niespodziewane triki :)</plug>
Powinieneś, powinieneś, yes please :-) Serio, przydałoby mi się i w robocie i po godzinach...

Liosan

Offline m4tx

  • Użytkownik
    • m4txblog

# Lipiec 12, 2012, 08:33:37
@vashpan
[...] Java... nie jest przenosna. Nie jest przenosna w sensie gier... Ze wszystkich istotnych platform dla gier ( Windows, XBox 360, PS3, iOS, Android, Mac OS X ) Java jest dostepna na 3...
O Linuksie zapomniałeś :) Zwłaszcza że ostatnio producenci gier się tą platformą mocno zainteresowali, m.in. Valve, który obiecał w tym roku Steama i Source na Linuksa, czy EA, które mierzyło ostatnio popularność tej platformy (umieszczając 2 HTML5-owe gry w Ubuntu Software Center, no ale co tam...).

Offline hashedone

  • Użytkownik

# Lipiec 12, 2012, 09:20:19
Mógłbym prosić o jakieś linki?
Wystarczy spojżeć w kod MC;) Ale jeśli w momencie pojawienia się deszczu z płynncie działającej gry zaczyna mi się pokaz slajdów to sorry... problemem nie jest java (tzn. prawdopodobnie jest GC, ale on w ogole nie powinien tu startować). Inna rzecz - żebym na słabym, ale jednak nowoczesnym sprzęcie musiał wyłączyć przeglądarkę żeby komfortowo grać? Nie pamiętam dokładnych parametrów, ale takie gry jak FIFA12, Oblivion czy LoL, Wiedźmin 2 (oczywiście nie na maksymalnych ustawieniach) działają bez zająknięcia.

Offline Liosan

  • Redaktor

# Lipiec 12, 2012, 09:33:02
Wystarczy spojżeć w kod MC;) Ale jeśli w momencie pojawienia się deszczu z płynncie działającej gry zaczyna mi się pokaz slajdów to sorry... problemem nie jest java (tzn. prawdopodobnie jest GC, ale on w ogole nie powinien tu startować).
... nie do końca o taką odpowiedź mi chodziło... :-) Raczej szukam jakiegoś tekstu w stylu "Rok już mija jak studiuję kod Minecrafta, i tutaj mam listę kiepski decyzji implementacyjnych". Piszę grę w Javie, mającą coś wspólnego z silnikami voxelowymi, i taki tekst mógłby być dla mnie ciekawy :-)

Liosan

Offline Karol

  • Użytkownik

# Lipiec 12, 2012, 10:34:21
Swego czasu czytałem, że MC nie używa żadnych VBO i tym podobnych tworów do renderowania świata, tylko do mobów używa calllisty. Pracując nad swoim Koparnikiem zauważyłem, że jeżeli każdą ściankę rysuję oddzielnie to istnieje duża szansa na "dziury" pomiędzy łączeniami polygonów (1-2 pikselki prześwitującego tła, zapewne wynik niedokładności floatów, często starsze/nowsze sterowniki do karty eliminowały problem), jeżeli jednak zapakuję jakiś zlepek voxeli w VBO to te dziury spotkać można tylko na styku dwóch VBO. W Minecrafcie te prześwity swego czasu zdarzały się co i rusz, teraz jak jest nie wiem, albo już nie rysują indywidualnie quadów, albo sterowniki poprawiły się.

Udało się też zrobić memory leaka w Javie - każdy kolejny ładowany chunk do pamięci nie był zwalniany,kiedy powinien (np. wyjście poza obszar renderu/przetwarzania), MC żądał coraz więcej i więcej pamięci, aż wreszcie java kapitulowała. To też wychodzi nieścisłość pewna, debug w MC pokazuje zużycie pamięci rzędu 300MB z 512MB, a proces java.exe zjadał 2,5GB.

Pamiętam, że było więcej różnych kwiatków, ale dawno już się tym nie interesowałem. Dla chętnych - http://mcp.ocean-labs.de/index.php/MCP_Releases można zdekompilować kod i samemu się przyjrzeć.

@hashedone - za mało RAMu? Przy 2GB da radę grać tylko w MC, przy 3GB łaskawie możesz mieć włączoną przeglądarkę i jakiś odtwarzacz.

Offline m4tx

  • Użytkownik
    • m4txblog

# Lipiec 12, 2012, 10:34:54
5) Trochę mało stabilna sytuacja jeśli chodzi o frameworki GUI. Był AWT, potem były SWT i Swing, teraz Swing jest deprecated. W C# jednak WinForms jest i WPF i tyle, nie ma żadnej konkurencji.
Swing nie jest deprecated. Deprecated jest Swing Application Framework, a to całkiem co innego. I generalnie Swing jako takiej konkurencji nie ma, bo jest dostarczany razem z JVM-em. SWT to całkiem oddzielna biblioteka. Bardzo dobra zresztą, zwłaszcza że używa natywnych komponentów zamiast je rysować tak jak Swing. Swoją drogą, użycie SWT zamiast Swinga było głównym moim powodem przejścia z NetBeansa na Eclipse'a. Swing jest strasznie powolny.

Offline goshki

  • Użytkownik
    • Vigeo Games

# Lipiec 12, 2012, 10:41:39
Aplikacje pisane w NDK też są ładowane do maszyny wirtualnej działającej pod kontrolą Javy, jak wszystko na Androidzie.

Jeśli masz na myśli, że to co powstaje z NDK jest ładowane jako bajtkod Javy/Dalvika to... nie. :-) NDK to natywny kod C/C++ w formie .so, z którym aplikacja może komunikować się np. przez JNI. Działa to na takiej samej zasadzie jak biblioteki natywne w desktopowej Javie (np. LWJGL zawiera w sobie natywne biblioteki, np. OpenAL.dll dla wersji Windows i libopenal.so dla Linuxa). Ale tak jak wspomniał olo16 od wersji 2.3 można napisać całą aplikację w NDK.

A wracając do tematu wątku - stereotypy i fanboje objawiają się w każdej dziedzinie życia. I są najbardziej widoczni, bo zazwyczaj wyrażają swoją opinię najgłośniej. A prawda IMHO jest taka, że język to tylko narzędzie, które wybieramy w oparciu o kilka czynników, np. typ aplikacji, wydajność, łatwość poznania, łatwość prototypowania, zasięg (cross-platformowość), dostępność gotowych komponentów (bibliotek) i przykładów, społeczność skora do pomocy i pewnie jeszcze kilka innych. Grę można napisać chyba w każdym istniejącym języku, tylko nie w każdym jest to sensowne. ;-) Kiedyś też się śmiali z Pythona, z Lua, z Visual Basica. Ba, z C++ też się śmiali, bo prawdziwe gry powstawały w C, albo w Assemblerze. A potem Carmack, na potrzeby id Tech 4, przepisał część id Tech 3 na C++. :>

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Lipiec 12, 2012, 11:17:06
No wlasnie, dochodzimy do kolejnej rzeczy, Java... nie jest przenosna. Nie jest przenosna w sensie gier... Ze wszystkich istotnych platform dla gier ( Windows, XBox 360, PS3, iOS, Android, Mac OS X ) Java jest dostepna na 3

Nie zapominaj o przeglądarce (applety javowe)

Swing nie jest deprecated. Deprecated jest Swing Application Framework, a to całkiem co innego. I generalnie Swing jako takiej konkurencji nie ma, bo jest dostarczany razem z JVM-em. SWT to całkiem oddzielna biblioteka. Bardzo dobra zresztą, zwłaszcza że używa natywnych komponentów zamiast je rysować tak jak Swing. Swoją drogą, użycie SWT zamiast Swinga było głównym moim powodem przejścia z NetBeansa na Eclipse'a. Swing jest strasznie powolny.

Pisałem sporo w SWT i Swingu, z moich obserwacji SWT jest dobre do aplikacji biznesowych, gdzie nie zależy nam na np. customizowanym wyglądzie kontrolek. W grach Swing jest według mnie monopolistą (jako biblioteka GUI), bo da się w nim zrobić o wiele więcej. Poza tym w SWT są problemy z przenośnością, kontrolki zachowują się troche inaczej na różnych platwormach, swing działa wszędzie praktycznie tak samo.

Offline Nsuidara

  • Użytkownik
    • Site

# Lipiec 12, 2012, 20:58:28
Sposobem dobrym na przetestowanie-porównanie języków programowania mogą być złożone algorytmy z dziedziny sztucznej inteligencji / analizy.
Przykładowo może być "Klasyfikacja metoda k-NN (k-Nearest Neighbours)"
Gdzie na wejściu damy dość sporą ilość danych i przeprowadzić testy dla różnych 'k' dla każdego języka.

Np. Testowałem to na PHP, C++ i bodajże na scilabie
Naprawdę wyniki były zadziwiające ^^ PHP - jest wolne :F (nawet standardowo algorytm nie wykona się jeżeli przekroczy limit czasu wykonania... :F)

Offline Kos

  • Użytkownik
    • kos.gd

# Lipiec 14, 2012, 12:34:22
Pisałem sporo w SWT i Swingu, z moich obserwacji SWT jest dobre do aplikacji biznesowych, gdzie nie zależy nam na np. customizowanym wyglądzie kontrolek. W grach Swing jest według mnie monopolistą (jako biblioteka GUI), bo da się w nim zrobić o wiele więcej. Poza tym w SWT są problemy z przenośnością, kontrolki zachowują się troche inaczej na różnych platwormach, swing działa wszędzie praktycznie tak samo.
Zależy, co chcemy osiągnąć. :) Przy typowym "użytku" chciałbym, by na każdym systemie wyglądał i zachowywał się "po systemowemu", a nie wszędzie tak samo.

A jak to wygląda w SWT i w Swingu w kwestii wsparcia systemowych ficzerów, takich jak jumplisty lub pasek postępu w taskbarze (win 7), albo te Macowe diabelstwa z docka? :) Wiem tyle, że SWT radzi sobie bardzo ładnie z systemowym progress barem.
Ktoś do SWT nawet ribbona zrobił. :D

Offline m4tx

  • Użytkownik
    • m4txblog

# Lipiec 14, 2012, 14:15:04
A jak to wygląda w SWT i w Swingu w kwestii wsparcia systemowych ficzerów, takich jak jumplisty lub pasek postępu w taskbarze (win 7), albo te Macowe diabelstwa z docka? :) Wiem tyle, że SWT radzi sobie bardzo ładnie z systemowym progress barem.
Ktoś do SWT nawet ribbona zrobił. :D
Do Swinga też ktoś zrobił :) A to, co tu jest w SWT, to, z tego co widzę, rozwiązanie korzystające z WinAPI, a więc na Linuksie czy Macu nie zadziała :)

/* Edit: "normal Office ribbon can access and override Windows API which SWT cannot" - ah, chyba jednak zadziała :P */

Generalnie Swing w ogóle nie integruje się z systemem... Głównie za sprawą tego, że nie używa natywnych widgetów, tylko rysuje własne. Nie ma wsparcia dla quicklist, jumplist, czy innych wynalazków, jak progressbary na taskbarze/docku/unity launcherze. A poza tym jest okropnie wolny, co można odczuć np. porównując szybkość Eclipse'a (SWT) i NetBeansa (Swing), zwłaszcza na Linuksie... :)
« Ostatnia zmiana: Lipiec 14, 2012, 14:16:43 wysłana przez m4tx »