sobota, czerwca 22, 2019

Java 8 + lambdy = wolno ;-)

Używamy w pracy Codility to testowania kandydatów, używamy go też czasem w ramach konkursów na różnych konferencjach.
I okazuje się, że Codility niechcący kara ludzi, którzy znają nowszą Java'ę ;-)

Jeśli ktoś operuje na kolekcji przy pomocy pętli to może dostać ocenioną złożoność O(n), jeśli użyje strumieni i lambd to może dostać ocenioną złożoność O(n*log(n)).

A wszystko przez to, że w Java 8 lambdy nie są najszybsze.

Widać to świetnie gdy używa się computeIfAbsent, zamiast getOrDefault w mapach.
Bo kod z computeIfAbsent wykonuje się zwykle wolniej, mimo tego, że getOrDefault tworzy nowy obiekt za każdym razem gdy jest wołane.

A wszystko przez to, że lambda musi być najpierw zbudowana ;-) i po to kompilator dodaje wywołanie metody LambdaMetafactory.metafactory, które jest wołane przy pomocy invokedynamic.

A w Java 8 wywołanie tego trwa wieki....
Coś co wykonuje się w mniej niż 10 ms, może się wykonywać nawet 80 ms.

Na szczęście w Java 11 wydaje się, że wszystko jest szybsze i nie widać znaczącej różnicy w wykonaniu kodu z lambdami i bez.

Podobne postybeta
Zaczynam woleć Map<Key,int[]> nad Map<Key,Integer> ;-)
Mody w rekrutacji IT ;-)
Nie znoszę programowania "funkcyjnego" :-)
Olśnienia :-)
Sztuczki tropiciela błędów - breakpoint na sterydach ;-)

czwartek, czerwca 13, 2019

Upał promuje mniejszych?

Kiedyś tłumaczyłem tutaj czemu małe pieski noszą w zimę ubranka.

Przypomniało mi się to i tak się zacząłem zastanawiać czy rozmiary mają wpływ na radzenie sobie z upałem....

Przyjmijmy, że mamy dwie osoby, jedną o wzroście 184 cm, drugą 161 cm.
Przyjmijmy, że mają obie te osoby BMI równe 22.5.

Czyli pierwsza waży 76.2 kg, druga 58.3 kg.

Dla ułatwienia przyjmijmy, że każda z tych osób ma gęstość 985 kg/m3.

I zamodelujmy obie osoby jako cylindry ;-)

Pierwsza osoba ma promień 11.6 cm, druga 10.8 cm.

Obie mają temperaturę 36.6 stopni C.

Powierzchnia 1 osoby to 1.43 m2, drugiej to 1.16 m2. To daje strumień całkowity mocy z pierwszej osoby 61.4 W, a z drugiej 50.2 W (strumień wychodzący-strumień wchodzący, w końcu powietrze ma 30 stopni C).

Teraz policzmy ile, gdyby nie utrzymywały temperatury, ile by im ubywało... przyjmiemy ciepło właściwe dla człowieka równe 3.49 kJ/(kg*K).

Mamy w końcu, że w ciągu sekundy mniejsza osoba straciłaby o 1.6 stotysięcznej stopnia więcej od osoby większej.

Znaczy to, że małym lepiej w upale, szybciej się chłodzą.


Podobne postybeta
Czemu małe pieski noszą ubranka, a duże psy nie?
Pokrowiec - zdeużytecznik ;-)
I tak żle i tak niedobrze
Kupić bilet czy nie kupić? Oto jest pytanie....
Czemu prysznic jest bardziej eco(nomiczny) i eco(logiczny) ;-)