Java 9 on ulkona

No niin, tällä kertaa vain nopea heads-up, eli Java 9 putkahti juuri putkesta:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Olen blogaillut tästä jo useampia kertoja, mutta nyt on aika asentaa se ja ottaa ensisavut, katsoa miten release versio toimii käytännössä.

jrepl ja modulet paukkumaan.

[edit]

Tuikataan nyt heti tähän huomio: Spring 1.x ei futaa JDK 9 kanssa, ei siis käänny, eikä tulekaan kääntymään. Siellä on sorkittu JDK internalseja joita ei enää ysissä saa sorkkia.

Spring 2 tulee tukemaan Java versiota 9 – Milestonesta 4 alkaen pitäisi jo periaatteessa tukea. En ole vielä ehtinyt varmentamaan.

Mainokset

Java 9 on kymmenen kertaa nopeampaa!

Törmäsin mielenkiintoiseen ilmiöön taannoin. Valmistelin esitystä suorituskyvystä ja Java muistimallista, ja ajoin eräänlaista benchmark sovellusta Dockerin avulla eri virtuaalikoneissa. Sovelluksen ideana on sisältää aika typerästi kirjoitettua mutta varsin tavanomaista Java-koodia. Silmukoita, ehtolauseita, merkkijonojen käsittelyä, laskentaa, kokoelmien käsittelyä, ja kellottaa paljonko kaikkeen menee aikaa. Tällä voidaan myös nähdä nykyaikaisen virtuaalikoneen itseään optimoiva vaikutus – kun ajo jatkuu, nopeus yleensä kasvaa. Tässä on sovelluksen mittaustuloksia Oracle Java 6 Docker kontissa ajettuna:

Screenshot 2016-10-16 13.19.54.png

Eli, yhden kierroksen aika on n. 84 sekuntia, laskien 82 sekuntiin jahka virtuaalikone vähän ”lämpenee” eli käytännössä jit-kääntää enemmän koodia ja tekee muita tarvittavia optimointeja.

 

Tässä on OpenJDK+Java 8 ajotulokset:

Screenshot 2016-10-16 13.23.31.png

Kuten tuloksista näkyy, uudempi virtuaalikone optimoi usein tehokkaammin. Tässä kierrosajat pyörivät n. 62 sekunnin pinnassa – Java 6 verraten on irronnut noin 20 sekuntia, tai 1/4 suoritusajasta. Paras kierrosaika oli jopa 52 sekuntia. Aika hyvä tulos!

Kokeillaanpa G1 roskankeruualgoritmilla:

Screenshot 2016-10-16 13.35.12.png

Oops! Vaikka G1 on teoriassa kauneinta ja uusinta mitä roskankeruualgoritmeihin tulee, se ei ole joka ongelmaan optimaalinen ratkaisu. Suoritusajat vaihtelevat 98 ja 104 sekunnin välillä ja ovat nousemaan päin. Tällä sovelluksella ja tämän koneen muistilla tässä tuli takapakkia, huonompi suorituskyky. Varmaan tästä syystä G1 ei ole vielä oletusalgoritmina vaan pitää erikseen kytkeä päälle lisäparametrilla -XX:+UseG1GC.

Java 9 julkaistaan vasta pitkällä ensi vuonna. Siitä on kuitenkin jo prereleaseja liikkeellä, ja jopa Docker virtuaalikuva. Tämän ansiosta on lasten leikkiä ajaa sama koodi Java 9:llä. Tulokset tässä:

Screenshot 2016-10-16 13.36.26.png

WUT? Sama koodi, tekee saman asian, sama koneympäristö ja resurssit. Suoritusajat vaihtelevat 9 ja 12 sekunnin  välillä. Karkeasti ottaen noin kymmenen kertaa nopeampaa kuin useimmat muut testiajot, ja yli viisi kertaa nopeampaa kuin paras tulos tähän asti.

Jotain on muuttunut. Mitä, en tiedä vielä. Epäilen että yksi tekijä voi olla Jigsaw moduulimallit. Toinen tekijä lienee, että on taas opittu tunnistamaan joku negatiivinen koodaustapa, ja optimoimaan sen suoritus. Tulokset tuskin ovat yleispäteviä, ne pätevät lähinnä tähän tyypilliseen koodiesimerkkiin mitä käytin, ja tähän ympäristöön. Docker välissä voi myös vaikuttaa jotain, tuskin kuitenkaan paljoa. Niin tai näin, koodi otti taas kerran hurjan tehokkuushypyn. Tätä herkkua olisi luvassa ensi vuonna.

Virtuaalikoneiden ihanuus on siinä, että nautit kaikista edistysaskelista, ilman koodimuutoksiakin. IBM nimesi juuri oman open source JDK 9 versionsa JIT-kääntäjän Testarossaksi, joten veikkaisin että sieltä on myös suurta hyvyyttä tulossa.

p.s. Docker on ihana keksintö!

p.p.s. Niin on Cathode terminaalikin :p

 

Java 9 viivästyy – saatavana heinäkuussa 2017

Tuoretta uutista, tosin ei yllättävää. Java 9 – jota on jo lykätty useita kertoja, ja jonka ominaisuudet ovat kaikki aiemmista versioista lykättyjä – viivästyy vielä. Tällä kertaa ihan ymmärrettävästä syystä. Se ei vain ole vielä valmis, ei ehdi, ja muutokset ovat merkittäviä.

Mutta käytännössä siis mennään Java 8:lla vielä tovi, ja aikaa on oppia mikä kaikki muuttuu Java 9 myötä. Tämä viimeisin lykkäys ei ole kuin 4kk lykkäys, ja toki nyt jo saatavana olevat EA buildit ovat varsin pitkällä. Mutta kun corea sorkitaan, pienikin muutos on iso muutos ja vaatii aikaa ja rakkautta. 😉

Tieto ei ole toki vielä vahvistettua, mutta lykkäystä on ehdotettu, ja ehdotus menenee läpi koska valmista ei vain tule aiemmalla aikataululla.

Lähde: http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-September/004887.html

JavaOne 2016 häämöttää

Viikko vielä aikaa JavaOne seminaariin – viikon päästä paikallista aikaa sunnuntaina olen paikan päällä San Franciscossa, pää pyörällä jetlagista ja sessioista, absorboimassa kaiken tiedon ja vaikutelmat mitä saatavilla on. Pitäisi olla mielenkiintoinen viikko tulossa.

Yli neljästäsadasta sessiosta on jotakuinkin mahdotonta valita edes suurin osa mikä kiinnostaa. Itse priorisoin Java 9 asioita, Docker ja Microservices asioita, ja sitten hiukan Java EE 8 puolta myös. Voisin löydä vetoa että sitä valaistaan muutenkin keynoteissa. Ohjelman ulkopuolella on myös muutama kiinnostava yhteisötapaaminen ja keskustelu luvassa, ja tietenkin yritän bongata mahdollisimman paljon suomalaisia Javastajia.

 

 

Nyt olisi tarkoitus bloggailla paikan päältä päivittäin jotain pientä, vaikutelmia ja highlighteja. Blogaus tapahtuu tällä kertaa englanniksi, Solitan dev-blogin puolella, eli sitä kannattaa pitää silmällä. Sitä kannattaa muutenkin pitää toki silmällä – raudankovaa settiä tulossa usealta muultakin kirjoittajalta taas lähiaikoina:

http://dev.solita.fi/

 

Java 9 ja CORBA

Heh, niinpä. Olen kirjaillut aiemmin useammankin kerran tulevan Java 9:n ihmetyksen aiheista. Silmiin osui hauska artikkeli siitä miten viimeinkin CORBA, Common Object Request Broker, tuo kaikkien väylien ja hajautuksen edelläkävijä ja kaikkien sitä käyttäneiden inhokki, ei enää tule vakiovarusteena perus-Javassa.

Java 9 suuri uudistushan on modulaarisuus, ja sen tärkeimpänä osana ja ajurina Javan n. 20-megainen runtime modularisoidaan, siten että sieltä löytyy tiukka ydin-kernel, ja lukuisia moduuleita joita voi halunsa mukaan ottaa mukaan tai jättää ottamatta. Pitkän tähtäimen strategia on varmasti paluu mobiili ja IoT ympäristöihin uusin voimin.

Eli, oletuspaketti, root moduulit, ei sisällä enää tarpeetonta kuraa, ja osa tarpeellisistakin lähtee erilleen. Jos kaipaat CORBAA, saat sen takaisin kytkimellä:

-addmods java.corba

Hyvä huomata että vastaavia muita moduuleita ovat mm.:

java.activation
java.annotations.common
java.corba
java.transaction
java.xml.bind
java.xml.ws

Näyttäisi siis siltä että viimein Java menee tosissaan tiukalle dieetille. Java 9:stä kuulemme varmaan lisää tämän vuoden JavaOne seminaarissa San Franciscossa – mutta mielenkiintoa näyttäisi olevan. Varmaa on, että jatkossa on syytä opetella käyttämään moduulijärjestelmää ja sen kytkimiä – muuten ei vanhat Java-koodit enää edes käänny.

Toinen tutkaimiin osunut juttu on moneltakin taholta julistettu Java EE 8 kuolema. Oraclen panostus ja mielenkiinto sen suhteen näyttää olevan lopahtamassa. Mielenkiinnolla seuraan mitä tämä tarkoittaa, ja mitä tuo tullessaan. Tutkaimet herkkinä. Tämäkin selvinnee syksymmällä.

 

http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-May/004309.html

 

Jigsaw myöhästyy vuodella

No niin, Java 9 Jigsaw, jonka piti alunperin olla osa Java 7 releasea, ja tulla käyttöön 2008 – viivästyy jälleen kerran.

http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-December/003149.html

Eli aiempi aikataulu oli: Feature complete näillä main, ja general availability ensi kesänä. Tämä menee nyt uusiksi. Eli uusi aikataulu: Feature complete ensi kesänä, GA julkaisu maaliskuussa 2017. Hui mikä deadline!

Tästä alkaa jo tulemaan vitsi, kun julkaisua on toistuvasti lykätty, ja pian tulee 10-vuotinen historia yhdelle featurelle täyteen. No, toisaalta se on aika iso, monimutkainen, ja ehdottomasti legacy koodia hajottava päivitys, joten parempi että tehdään mahdollisimman huolellisesti, sanon minä. Joka tapauksessa, tämä tarkoittaa että koko ensi vuosi saadaan rauhassa vielä nautiskella Java 8 versiosta, ja konservatiivisempien talojen osalta ehkä useampikin vuosi (joku ajaa vielä kuulemma Java 1.1 tuotantosovelluksia… Brr…)

Jigsaw tosiaan muuttaa hyvinkin paljon. Kirjoitin tästä firmablogiin artikkelia:

http://dev.solita.fi/2015/10/15/goodbye-glasspath-java-9.html

Osa näistä tiedoista on sittemmin muuttunut, ja lisää on jo tullut. Kirjoittelen myöhemmin kakkososan joka on enemmän ajan tasalla ja konkretisoitua tietoa. Se tieto näyttää tässä kohtaa jo kiinnostavan moniakin joilla on katse tulevaisuutta kohden. Hyvä varautua ajoissa ja pitää silmät auki, mutta nyt näyttää aikaa olevan vielä reippaasti perehtyä.

Jigsaw ei tosiaan ole kehittäjän kannalta huippuhyödyllinen muutos välittömästi, mutta se on strateginen ja pysyvä muutos, joka onnistuessaan saa Javan pysymään työkalupakeissa jatkossakin. Tai ainakin antaa siihen vahvat mahdollisuudet.

jenv ja virtuaalikoneiden ihanuus

Olen ihastunut.

Työssäni tulee käyteltyä Javan eri versioita vieläkin, koska vaikka maailma alkaa olla Java8-valmis, vieläkin tulee vastaan ympäristöjä jotka eivät toimi kuin vanhemmilla versioilla. Toisaalta uutta on aina kiva kokeilla. Java 9 tekee tuloaan ensi vuonna, ja siitä on jo esiversiota tarjolla.

Ikuinen ongelma on ollut useamman virtuaalikoneen, saati sitten JDK version hallinnoiminen koneessa – tai edes sen pääasiallisimman valitseminen oikein jos useampi JDK on asennettuna. Homman salaisuus on alkanut JAVA_HOME ja PATH ympäristömuuttujien hyvästä hallinnasta, mutta asiaa sotkevat myös erinäiset rekisteriasetukset ja/tai symboliset linkit. Kysymys kuuluu: kun kirjoitat komentoriville

java -version

javac -version

… niin mikä sieltä vastaa? Ja onko se mitä haluat? Vai vastaako mikään?

Windows maailmasta huonoja uutisia: Windowsin rekisteriin tallettuville jämille on vaikeata tehdä mitään. Java Windowsilla, sen kanssa voi pärjätä, mutta ei se hauskaa ole. Tokkopa on tarkoituskaan olla.

Nykyisin Mac-käyttäjänä olen onneksi päässyt rekisterihelvetistä eroon. Mutta koska tälläkin alustalla problematiikkaa riittää, eksyin tutustumaan jenv-työkaluun, joka osaltaan helpottaa hommaa. Valitettavasti vaatii toimiakseen bash-valmiin käyttöjärjestemän, eritoten Mac OSX tai Ubuntu pelittää hienosti.

Jenv löytyy osoitteella http://www.jenv.be/ – ja toki myös GitHubista suoraan. Itse tuikkasin sen Maciini Homebrew:llä, kuten monet muutkin kivat jutut. Jahka se löytyy komentoriviltä, tärkeimmät komennot ovat:

jenv add /PATH/TO/VM

jenv versions

jenv shell java-version-that-i-want-to-use

Noista on paljon hyviä esimerkkejä heti pääsivulla. Toki voi myös asettaa pysyvämmin default virtuaalikoneen käyttöön, mutta esim. tuo jenv shell-komento antaa mahdollisuuden kokeilla Java 9 prereleasea turvallisesti sotkematta silti vakaampia projektejaan. Ja mikä mukavinta- toimii myös ANT ja Mavenissä suoraan.

Jenv ja JDK 9 vauhdissa

Edellämainitun lisäksi toki on monta muutakin virtuaalikone-ulottuvuutta: Mitä virtuaalikonetta selaimesi käyttää (jos käyttää), entä IDE ympäristösi? Maven? Eli ei ihan yksinkertainen asia. Hyvä kuitenkin aloittaa perusteista, eli siitä että ainakin yhdessä paikassa homma toimii juuri kuten haluat.

Toinen jenv löytyy muuten osoitteessa http://jenv.io/ – näyttäisi tukevan myös Windows hommeleita.