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
Re:Java vs. Swift
« Odpověď #4 kdy: 28. 04. 2017, 14:13:16 »
Citace od: jw kdy 28. 04. 2017, 12:54:36
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 »
Citace od: zboj kdy 28. 04. 2017, 14:13:16
Citace od: jw kdy 28. 04. 2017, 12:54:36
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 »
Citace od: Youda kdy 28. 04. 2017, 15:24:11
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
Re:Java vs. Swift
« Odpověď #8 kdy: 28. 04. 2017, 18:36:00 »
Citace od: Kamil Podlešák kdy 28. 04. 2017, 18:19:50
[...] 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 »
Citace od: zboj kdy 28. 04. 2017, 18:36:00
Citace od: Kamil Podlešák kdy 28. 04. 2017, 18:19:50
[...] 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
Re:Java vs. Swift
« Odpověď #10 kdy: 28. 04. 2017, 19:37:46 »
Citace od: balki kdy 28. 04. 2017, 18:45:46
Citace od: zboj kdy 28. 04. 2017, 18:36:00
Citace od: Kamil Podlešák kdy 28. 04. 2017, 18:19:50
[...] 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 »
Citace od: zboj kdy 28. 04. 2017, 19:37:46
Citace od: balki kdy 28. 04. 2017, 18:45:46
Citace od: zboj kdy 28. 04. 2017, 18:36:00
Citace od: Kamil Podlešák kdy 28. 04. 2017, 18:19:50
[...] 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 »
Citace od: zboj kdy 28. 04. 2017, 19:37:46
Citace od: balki kdy 28. 04. 2017, 18:45:46
Citace od: zboj kdy 28. 04. 2017, 18:36:00
Citace od: Kamil Podlešák kdy 28. 04. 2017, 18:19:50
[...] 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
Re:Java vs. Swift
« Odpověď #13 kdy: 28. 04. 2017, 21:18:31 »
Citace od: gll kdy 28. 04. 2017, 20:44:10
Citace od: zboj kdy 28. 04. 2017, 19:37:46
Citace od: balki kdy 28. 04. 2017, 18:45:46
Citace od: zboj kdy 28. 04. 2017, 18:36:00
Citace od: Kamil Podlešák kdy 28. 04. 2017, 18:19:50
[...] 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
Re:Java vs. Swift
« Odpověď #14 kdy: 28. 04. 2017, 21:40:55 »
Citace od: balki kdy 28. 04. 2017, 20:56:12
Citace od: zboj kdy 28. 04. 2017, 19:37:46
Citace od: balki kdy 28. 04. 2017, 18:45:46
Citace od: zboj kdy 28. 04. 2017, 18:36:00
Citace od: Kamil Podlešák kdy 28. 04. 2017, 18:19:50
[...] 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.