sobota, września 26, 2020

Człowiek się uczy całe życie - źle rozumiałem cache'owanie Integerów :-)

Tak się bawię nowym IntelliJ i jak używa się var to próbuje podpowiedzieć jaki będzie wywnioskowany typ.

Działa to różnie:


Ogólnie zasada chyba jest taka, że parser Java'y w IJ potrafi wywnioskować typ na podstawie zwracanego typu (to ma przy metodach) i czasem jak przypisanie jest z prostej deklaracji z typem.
Nie jest więc tak wszechstronny jak kompilator Java'y, ale kompilator wie więcej.

Ale ja nie o tym tutaj ;-)

Bawiąc się tym zauważyłem, że konstruktor dla Integer jest deprecated, sprawdziłem i to prawda od wersji 9.
I tak się zacząłem tym bawić i okazuje się, że przez ostatnie ~16 lat żyłem w błędnym przekonaniu....

Zawsze pamiętałem, że JVM ma optymalizację by nie przeginać z ilością Integer'ów, i że np. dla 1 jest dokładnie 1 obiekt w pamięci, a wszystkie zmienne które trzymają Integer'a o wartości 1 mają referencję do tego jednego jedynego.... i że JVM od Oracle'a ma to dla liczb od -128 do 127 (choć teraz jak to widzę to jest konfigurowane).

I zawsze tu zakładałem, że JVM ogarnia jakoś wołanie new Integer(x), czy może bardziej kompilator jak się zastanowić...

No i byłem przekonany, że:

wypisze true...

A tu "dupa", nie, wypisze false, bo new stworzy dwa całkiem nowe obiekty. Żeby cache zadziałał trzeba użyć Integer.valueOf....

Fakt, sam używam "od zawsze" Integer.valueOf(int), ale przyznam, że coś mi się porobiło w głowie jak do mnie dotarło jak błądziłem.

Choć niech mnie tłumaczy, że jak mi się zdarza pracować z Integer to właśnie przez Integer.valueOf, albo przez autoboxing, a:
Zadziała tak, że wypisze true.

Jak na to spojrzeć to to ma pełen sens, bo skąd biedna JVM ma wiedzieć, że nowo tworzony obiekt Integer wskazuje na już istniejący? Albo kompilator by musiał generować tu specjalny kod do obsługi tego dla new, albo sama JVM w momencie "zobaczenia wołania" w stylu:

musiałaby nie wołać konstruktora, ale zaglądać do cache.... i jak sprawdziłem nawet Java 8 nie robiła takich cudów :-)




Podobne postybeta
Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)
Ile to jest 1+1 w Java'ie?
Magia w Java'ie ;-)
Chorowanie jest do bani, czyli wspomnienia z L4... które trwa ;-)
Zmienne Go ;-)

środa, września 23, 2020

Magia w Java'ie ;-)

Jaki jest maksymalny rozmiar tablicy w Java'ie? ;-)

Niby wydaje się, że ma to coś z int wspólnego, ale nie będzie to pełny zakres int, bo w Java'ie int jest signed, więc Integer.MAX_VALUE wydaje się być rozsądnym kandydatem...

Ale jak wrzucimy kod w stylu:

var array = new int[Integer.MAX_VALUE];

To poleci nam:

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit

nawet gdy uruchomimy JVM z odpowiednim zapasem RAM (8GB, a testowałem z 24GB dla pewności ;-)).

Podobnie:

var array = new int[Integer.MAX_VALUE-1];

wyrzuci taki sam wyjątek.

Ale już:

var array = new int[Integer.MAX_VALUE-2];

zadziała :-)

Przyznam, że próbowałem kiedyś dotrzeć w źródłach JVM do miejsca gdzie to jest zakodowane, a dokładniej gdzie widać skąd to magiczne 2.... ale sam limit chyba znalazłem, ale nie pamiętam powodu.

No chyba, że po prostu te 8 bajtów jest na długość albo opis obiektu? 

Chyba mam coś do poszukania :-)




Podobne postybeta
Android - nawet platofrma potrafi przeciwko Tobie knuć ;-)
Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)
Distinct (albo unique) w JavaScript
Człowiek się uczy całe życie - źle rozumiałem cache'owanie Integerów :-)
Distinct w JavaScript #2

Zabawy z Zoomem - ikonki ;-)

 Możliwe, że jestem dziwny, ale gdy biorę udział w jakimś spotkaniu przez Zooma (które mi zabierają zwykle ponad 50-60% czasu pracy w ciągu dnia....) i ktoś dzieli się swoim ekranem to ślepie w poszukiwaniu ikonek aplikacji których nie znam ;-)

Albo w pasku, albo w Docku, choć dość dużo osób podobnie jak ja ukrywa Docka (ale fakt, większość nadal ma Docka na dole, a nie po lewej ;-)).

Co dziwne to choć patrzę i szukam to nie znalazłem jeszcze w taki sposób żadnej ciekawej apki.... ale mam ciągle nadzieję ;-)






Podobne postybeta
Motorola Mileston 2 fajna jest ;-)
Jowisz na zdjęciu :-)
Uber - jaka za tym musi stać fajna matematyka
14975 dni
Rok Darwina czas zacząć :-)

wtorek, września 15, 2020

API ssie w świecie walled gardens

Przez ostatnie kilkanaście lat napisałem (prywatnie} trochę softu, który ułatwiał mnie i innym życie.
Napisałem w tym czasie:
Gadacza - wtyczkę do PowerGG która czytała przez syntezator mowy to co ktoś do nas pisał (a jak chcieliśmy to też co my pisaliśmy do kogoś) na Gadu-Gadu,
OOo2GD, czyli OpenOffice.org2GoogleDocs - które było wtyczką do OpenOffice pozwalająca na wysyłanie i pobieranie dokumentów do i z Google Docs (oraz Zoho I serwerów WebDAV),
Bloggeroid - apka do Androida, która pozwalała na podanie postów na blogu prowadzonym na Bloggerze i umieszczenie w nich obrazków które były wysyłane do Picassa,
Chrome2Chrome - wtyczka do Chrome, która pozwalała przesyłać strony między różnymi instytucjami przeglądarki.

Było też parę innych, ale te były dość popularne i co ważne wszystkie robiły za klej miedzy różnymi aplikacjami. I gadały z różnego rodzaju API...
No i jak właściciele usług z których korzystałem zmieniali swoje modele biznesowe to i moje projekty przestawały działać albo były ograniczane w swym działaniu.

To pokazuje, że nie do końca warto podpinać się pod istniejące cudze usługi.
Bo ten ktoś może nam zrobić numer i po prostu usługę wyłączyć, albo ograniczyć.
Do tego wydaje się, że cały biznes idzie w kierunku walled gardens.
Kiedyś gdy Android zaczął być popularny i spopularyzował idee intentów pojawił się pomysł na WebIntents. Strony www mogłyby emitować lub rejestrować się na odbieranie różnych intentów przez co komunikacja między nimi byłaby prostsza. Łącznikiem miała być przeglądarka.
Specyfikacja się zaczęła pisać, Google było jednym ze sponsorów... I dość szybko projekt upadł bo za bardzo by to wszystko było interoperacyjne.
Jeszcze nie daj boże ktoś by używał strony A do tworzenia intentów obsługiwanych przez stronę B... I jaki interes w tym miałby ktoś ze strony A?

To samo w sieciach społecznościowych, na początku wszyscy poza Google Plus mieli otwarte API do prostowania i pobierania postów, były więc repostery. Publikowało się na jednej sieci, a inne dostawały kopię...
Też już tego nie ma.

Apple wprowadza Apple Silica i plotka głosi że na tych nowych Macach będzie można mieć tylko apki z AppStore....

W serwisach streamingowych też mamy wszystko osobno.
Już nawet plotki są, że podcasty zaczną być zamykane....
Niefajnie to.

posted from Bloggeroid




Podobne postybeta
Disconnect, Facebook, PayPal i wykop, czyli 1 plus i 3 minusy ;-)
Niehackerski dzień ;-)
Czy się stoi czy się siedzi.... kamerka w laptopie jako detektor tego czy biurko jest w trybie stand czy sit ;-)
Plug-in master ;-)
Web 2.0, czyżby opowieść o tym jak oddaliśmy Internet idiotom?

Głupi COVID-19

Wredny koronawirus i to, że pracuje już ponad pół roku z domu rozwalił mi totalnie zegar.
Zdecydowanie nie jestem typem który lubi pracować z domu. Brakuje mi rytmu który wyznaczało chodzenie i wracanie z pracy.
Do tego mam wrażenie, że cały czas jestem w pracy, bo choć na początku tego wymuszonego work from home wydzielilem sobie miejsce do pracy to nadal znajduje się ono w tym samym pomieszczeniu co reszta mojej działalności (taki ficzer studia ;-)).
Nawet już na konsoli nie grywam bo nie mam czasu...
Brakuje mi też ludzi i męczą mnie spotkania, których jest zbyt dużo.
W biurze można ustalić masę rzeczy ad hoc podchodząc do kogoś, a teraz tylko Zoom albo Slack.
Co znaczy że albo spotkania rozwalają dzień, albo człowiekiem ciągle przerywają, a jak sam chce coś spytać to akurat wtedy rozmówcy nie ma...
A najbardziej przerażające w tym jest to, że coraz częściej myślę, że to się nie skończy z początkiem 2021... A raczej 2022.
Głupi COVID-19.

posted from Bloggeroid




Podobne postybeta
Amd64, Intel64, EMT64, WTF64? ;-)
Android Nokia syndrome ;-)
15354.976 ;-)
Koronawirus - jak na mnie wpływa
Zapiski z 29 piętra....