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 nad Map ;-)
Sztuczki tropiciela błędów - breakpoint na sterydach ;-)
No i z lambdy nici
Wyniki do Sejmu na podstawie wyników do PE
Java 32 bit vs. Java 64 bit

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?
A mnie tam jednak prosty model klimatyczny przekonuje do twierdzenia, że mamy wpływ na zmiany klimatyczne i że globalne ocieplenie może być faktem
Kupić bilet czy nie kupić? Oto jest pytanie....
I tak żle i tak niedobrze
Pokrowiec - zdeużytecznik ;-)