Java vs. Swift

Onstn

Java vs. Swift
« kdy: 28. 04. 2017, 12:48:26 »
Mám dotaz, jestli máte někdo podobnou zkušenost. Máme relativně velkou aplikaci v Javě, je to webová služba s cca. 5000 požadavky za minutu, která (když to hodně zjednoduším) ukládá data ze senzorů (IoT) do databáze, která se pak na pozadí dále zpracovávají. Máme to na serveru s 24 vlákny a 64GB RAM a vše šlape, jak má. Nedávno někdo přišel s tím, že bude experimentovat se Swiftem. Nevím, jaké frameworky pro Swift existují, kolega použil něco od IBM, a když asi po týdnu skončil, jeho implementace dělá to samé, ale vytížení CPU kleslo ze 40% na asi 5% a náročnost na paměť z 50GB na necelých 8 (12 ve špičce, když se sejde výrazně více požadavků). To vzbudilo mou pozornost, trochu jsem googlil a našel poměrně hodně článků, jak někdo přešel z Javy, node.js nebo Pythonu na Go nebo Rust (Swift ne, ale ve všem ostatním je pozoruhodná shoda), čímž ušetřil 90% prostředků (serverů/času CPU/paměti, liší se článek od článku). Má otázka je, co mají zmíněné jazyky lepšího oproti Javě/node.js apod., že je rozdíl ve výkonu a spotřebě prostředků tak výrazný?


jw

Re:Java vs. Swift
« Odpověď #1 kdy: 28. 04. 2017, 12:54:36 »
Nepotrebuji 63GB pro garbage collector :)

balki

Re:Java vs. Swift
« Odpověď #2 kdy: 28. 04. 2017, 13:04:15 »
Problem byva, ze ludia nevedia uz programovat, na vsetko v jave nadrbu 10 frameworkov, potom to ide pomaly.

Kym nenapisete, ake technologie projekt pouziva, je to len na urovni "bla bla".


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Java vs. Swift
« Odpověď #4 kdy: 28. 04. 2017, 14:13:16 »
Nepotrebuji 63GB pro garbage collector :)
Aneb slovy klasika (možná Chris Lattner, už nevím): "Tracing GC is a poor man's automatic memory management." Ani vlastně nevím, jestli to je narážka na Android.


cba

Re:Java vs. Swift
« Odpověď #5 kdy: 28. 04. 2017, 15:14:02 »
Nepotrebuji 63GB pro garbage collector :)
Aneb slovy klasika (možná Chris Lattner, už nevím): "Tracing GC is a poor man's automatic memory management." Ani vlastně nevím, jestli to je narážka na Android.

Ahoj ZBOJ.... poslal jsem ti email na tvuj registracni email....

Youda

Re:Java vs. Swift
« Odpověď #6 kdy: 28. 04. 2017, 15:24:11 »
Tak nizke naroky, tedy prijmou WS call a insertovat do DB musi Java zvladnout s prstem v nose.
Osobne typyju, ze to nekdo postavil na zbytecne slozitych frameworcich, ze kterych vyuziva 5% funkcionality.
Pokud na ony proste zapisy do DB pouziva Hibernate s JSQL a ORM mappingem a nedejboze se zapnutymi transakcemi na Java urovni, pokud na WS pouziva builtin J2EE 7 container, bude to nenazrane.
Tyto frameworky maji primarni cil udelat robustni a udrozovatelnou business aplikaci, hodi se nejlepe za zapezpecene komplexni business procesy, na takovou trivku je to overkill.

Jako prvni pokus bych to skusil predelat do Apache Camel spousteneho ze Spring Boot.

Pokud by ani toto nestacilo, doporucuju jit na nizsi uroven, do Spring Bootu strci nejakou lightweight implementaci WS (Gretty), nizkourovnovy JDBC pool (C3PO, DBCP) a pres prepared statementy cpat data do DB naprimo.

Re:Java vs. Swift
« Odpověď #7 kdy: 28. 04. 2017, 18:19:50 »
Jako prvni pokus bych to skusil predelat do Apache Camel spousteneho ze Spring Boot.
Rovnou přeskočit. Rozdíl je hlavně v tom že místo "enteprise byrokracie" je tam "hip magie" - z hlediska performance jsou oba dva koncepty jsou srovnatelní žrouti.

Je tu ale ještě jedna věc, kterou bych tipnul - možnáje tam docela dost zpracování jednoduchých dat, od dekódování nějakého binárního protokolu až po nějaké nějaké konverze, agregace a podobně, možná i nějaké maticové operace? Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.

Nicméně, to jsou jenom takové špekulace.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Java vs. Swift
« Odpověď #8 kdy: 28. 04. 2017, 18:36:00 »
[...] Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.
Tento popis přesně vystihuje obecný problém Javy. Akorát nevím, proč tam je "naivně", ono to totiž jinak nejde, pokud člověk nechce mít část kódu v C.

balki

Re:Java vs. Swift
« Odpověď #9 kdy: 28. 04. 2017, 18:45:46 »
[...] Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.
Tento popis přesně vystihuje obecný problém Javy. Akorát nevím, proč tam je "naivně", ono to totiž jinak nejde, pokud člověk nechce mít část kódu v C.

Co na tom nejde inak napisat v jave? Dvojrozmerne pole obsahujuce double, alebo indexaciu prvku pomocou integeru?
To mate dost slabu predstavivost.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Java vs. Swift
« Odpověď #10 kdy: 28. 04. 2017, 19:37:46 »
[...] Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.
Tento popis přesně vystihuje obecný problém Javy. Akorát nevím, proč tam je "naivně", ono to totiž jinak nejde, pokud člověk nechce mít část kódu v C.
Seznam/pole čísel o dynamické velikosti.

Co na tom nejde inak napisat v jave? Dvojrozmerne pole obsahujuce double, alebo indexaciu prvku pomocou integeru?
To mate dost slabu predstavivost.
Seznam/pole čísel o dynamické velikosti.

gll

Re:Java vs. Swift
« Odpověď #11 kdy: 28. 04. 2017, 20:44:10 »
[...] Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.
Tento popis přesně vystihuje obecný problém Javy. Akorát nevím, proč tam je "naivně", ono to totiž jinak nejde, pokud člověk nechce mít část kódu v C.
Seznam/pole čísel o dynamické velikosti.

Co na tom nejde inak napisat v jave? Dvojrozmerne pole obsahujuce double, alebo indexaciu prvku pomocou integeru?
To mate dost slabu predstavivost.
Seznam/pole čísel o dynamické velikosti.

samozřejmě to jde, jen ne genericky.

balki

Re:Java vs. Swift
« Odpověď #12 kdy: 28. 04. 2017, 20:56:12 »
[...] Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.
Tento popis přesně vystihuje obecný problém Javy. Akorát nevím, proč tam je "naivně", ono to totiž jinak nejde, pokud člověk nechce mít část kódu v C.
Seznam/pole čísel o dynamické velikosti.

Co na tom nejde inak napisat v jave? Dvojrozmerne pole obsahujuce double, alebo indexaciu prvku pomocou integeru?
To mate dost slabu predstavivost.
Seznam/pole čísel o dynamické velikosti.

Pole  dynamickej velkosti sa da implementovat cez pole statickej velkosti. Dvojrozmerne pole sa da implementovat ako jednorozmerne. Zavisi od toho, aka funkcionalita je potrebna a usit to vhodne pre danu situaciu.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Java vs. Swift
« Odpověď #13 kdy: 28. 04. 2017, 21:18:31 »
[...] Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.
Tento popis přesně vystihuje obecný problém Javy. Akorát nevím, proč tam je "naivně", ono to totiž jinak nejde, pokud člověk nechce mít část kódu v C.
Seznam/pole čísel o dynamické velikosti.

Co na tom nejde inak napisat v jave? Dvojrozmerne pole obsahujuce double, alebo indexaciu prvku pomocou integeru?
To mate dost slabu predstavivost.
Seznam/pole čísel o dynamické velikosti.

samozřejmě to jde, jen ne genericky.
Tak se ukaž. Aby to nedopadlo jako s preemptivním schedulingem v Go...

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Java vs. Swift
« Odpověď #14 kdy: 28. 04. 2017, 21:40:55 »
[...] Pokud tam někdo naivně použije něco typu Map<Integer, List<List<Double>>> tak se GC (a tedy i CPU) fakt pěkně zapotí. A bohužel, takové věci opravdu efektivně a zároveň elegantně to prostě v Javě udělat nejde a nepůjde.
Tento popis přesně vystihuje obecný problém Javy. Akorát nevím, proč tam je "naivně", ono to totiž jinak nejde, pokud člověk nechce mít část kódu v C.
Seznam/pole čísel o dynamické velikosti.

Co na tom nejde inak napisat v jave? Dvojrozmerne pole obsahujuce double, alebo indexaciu prvku pomocou integeru?
To mate dost slabu predstavivost.
Seznam/pole čísel o dynamické velikosti.

Pole  dynamickej velkosti sa da implementovat cez pole statickej velkosti. Dvojrozmerne pole sa da implementovat ako jednorozmerne. Zavisi od toho, aka funkcionalita je potrebna a usit to vhodne pre danu situaciu.
Tak to jde vždy, ale nejde udělat dynamické nativně, což je taky to jediné, co jsem tvrdil.