Ohjelmointi

JDK 12: Java 12: n uudet ominaisuudet

Java Development Kit 12 -ohjelmistoversio, joka perustuu Java SE (Standard Edition) 12: een, on nyt saatavilla. JDK 12 -rakennukset ovat saatavana Oraclelta Linuxille, Windowsille ja MacOS: lle.

Mistä ladata JDK 12

Voit ladata JDK 12: n Java.net-verkkosivustolta.

Avoimen lähdekoodin koontiversiot ovat GNU General Public License v2: n mukaisia, Classpath Exception -sovelluksella. Oraclen JDK 12: n kaupalliset rakennelmat löytyvät Oracle Technology -verkosta avoimen lähdekoodin lisenssillä.

Java 12: n uudet ominaisuudet

Shenandoah roskien keräilijä

Java 12 lisää Shenandoahin, kokeellisen roskien keräysalgoritmin, vähentämään roskien keräyksen taukoja suorittamalla evakuointityötä samanaikaisesti Java-ketjujen suorittamisen kanssa. Shenandoah tarjoaa sopivan algoritmin sovelluksille, jotka arvostavat reagoivuutta ja ennustettavia lyhyitä taukoja. Tarkoituksena ei kuitenkaan ole korjata kaikkia JVM: n keskeytysongelmia.

Red Hat tukee tällä hetkellä Shenandoahia Aarch64- ja AMD64-arkkitehtuureissa.

G1-jätteiden keräilijän sekakokoelmat

Java 12 tekee G1-sekakokoelmista keskeytettävissä, jos ne saattavat ylittää taukotavoitteen. G1: n tavoitteena oli saavuttaa käyttäjän toimittama taukoaikatavoite sen keräystaukoille.

Aikaisemmin kehittynyt analyysimoottori valitsi keräämisen aikana tehtävän työn määrän. Tuloksena oli joukko alueita, jotka tunnetaan kokoelmasarjana. Kun joukko oli määritetty ja kerääminen aloitettu, G1 keräsi kaikki elävät objektit kokoelmien alueilla kaikilla alueilla pysähtymättä. Mutta tämä voi johtaa siihen, että G1 ylittää taukoaikatavoitteen, jos sovelluksen heuristiikka valitsee liian suuren kokoelmasarjan.

Tarvittiin mekanismi sen havaitsemiseksi, kun heuristiikka valitsi toistuvasti väärän määrän töitä kokoelmille, ja jos näin tapahtui, G1: n on suoritettava keräystyö vaiheittain, jolloin kokoelma voidaan keskeyttää jokaisen vaiheen jälkeen. Java 12: ssa esitetyn mekanismin avulla G1 voi tavoittaa taukoaikatavoitteen useammin.

Nopea palautus käyttämättömästä sitoutuneesta muistista

Java 12 parantaa G1: tä palauttamaan Java-kasan muistin automaattisesti käyttöjärjestelmään joutokäynnillä. Tämä muisti vapautuu kohtuullisessa ajassa, kun sovelluksen aktiivisuus on hyvin vähäistä.

Aikaisemmin G1 palautti muistia kasasta vain täydellä roskakorilla tai samanaikaisen jakson aikana. Kun G1 yrittää välttää täydellistä roskien keräystä ja käynnistää vain samanaikaisen syklin, joka perustuu kasan käyttöasteeseen ja kohdentamistoimintaan, se ei palauttaisi kasan muistia, ellei sitä pakoteta tekemään niin ulkoisesti. Tämä käytös oli epäedullista konttiympäristöissä, joissa resurssit maksetaan käytöllä. Vaikka JVM käyttää vain murto-osaa osoitetusta muistista toimimattomuuden vuoksi, G1 säilytti koko kasan. Joten asiakkaat maksoivat kaikki resurssit koko ajan, eivätkä pilvipalvelujen tarjoajat voineet hyödyntää laitteitaan täysimääräisesti.

Java 12: n avulla JVM pystyy havaitsemaan kasan vajaakäytön vaiheet ja vähentämään automaattisesti kasan käyttöä tuona aikana.

JVM-vakioiden sovellusliittymä

Tämä sovellusliittymä mallinnaa avainluokan tiedostojen ja ajonaikaisia ​​artefakteja, erityisesti vakiosta ladattavat vakiot. Java 12 määrittelee arvopohjaisten symbolisten viitetyyppien perheen uudessa paketissa, java.lang.invoke.constant, kuvaamaan kutakin kuormitettavaa vakiota.

Jokaisessa Java-luokassa on vakio pooleja, jotka tallentavat luokan operandit ja tavukoodin ohjeet. Vakioalueen merkinnät kuvaavat joko ajonaikaisia ​​artefakteja, kuten luokkia ja menetelmiä, tai yksinkertaisia ​​arvoja, kuten merkkijonoja ja kokonaislukuja. Nämä merkinnät tunnetaan ladattavina vakioina.

Luokkatiedostoja käsittelevien ohjelmien on mallinnettava tavukoodin ohjeet ja puolestaan ​​ladattavat vakiot. Mutta tavallisten Java-tyyppien käyttö ladattavien vakioiden mallintamiseen on riittämätöntä. Tämä voi olla hyväksyttävää ladattavalle vakiolle, joka kuvaa merkkijonoa, mutta ongelmallista on ladattavalle vakiolle, joka kuvaa luokkaa, koska "elävän" tuottaminen Luokka objekti luottaa luokan lataamisen oikeellisuuteen ja yhdenmukaisuuteen. Luokan kuormituksella on kuitenkin monia ympäristöriippuvuuksia ja vikatiloja.

Joten ohjelmia, jotka käsittelevät ladattavia vakioita, voitaisiin yksinkertaistaa, jos ne pystyisivät manipuloimaan luokkia ja menetelmiä sekä vähemmän tunnettuja esineitä, kuten menetelmäkahvoja ja dynaamisesti laskettuja vakioita nimellisessä, symbolisessa muodossa. Siten JVM-vakioiden sovellusliittymä antaa kirjastoille ja työkaluille yhden, standardin tavan kuvata ladattavia vakioita.

Parannettu käynnistys, CDS ja roskien keräys

Java 12 parantaa JDK-koontimenetelmää luodakseen oletusluokan tietojen jakamisen (CDS) arkiston oletusluokkalistalla 64-bittisillä alustoilla. Tämä parantaa käyttövalmiita käynnistysaikoja ja poistaa tarpeen ajaa -Xshare: kaatopaikka hyötyä CDS: stä. JDK: n koontiprosessia on muutettu suoritettavaksi java-xshare: dump kuvan linkittämisen jälkeen.

Muita komentorivivaihtoehtoja on sisällytetty roskien keräämisen kasa-aikojen hienosäätöön muistin asettelun parantamiseksi tavallisissa tapauksissa. Käyttäjät, joilla on edistyneempiä vaatimuksia, kuten mukautetut luokaluettelot, jotka sisältävät sovellusluokat ja erilaiset roskakorin kokoonpanot, pystyvät edelleen luomaan mukautetun CDS-arkiston.

Pienempi ARM-porttien määrä

Java 12 poistaa kaikki siihen liittyvät lähteet käsivarsi64 portti säilyttäen samalla 32-bittisen ARM: n ja 64-bittisen aarch64. Tämän portin poistaminen antaisi avustajien keskittää ponnistelunsa yhteen 64-bittiseen ARM-toteutukseen ja poistaa päällekkäisen työn, joka johtuisi kahden portin ylläpidosta. Tällä hetkellä kaksi 64-bittistä ARM-porttia on JDK: ssa.

Vaihda lausekkeita

Kytkinlausekkeet yksinkertaistavat koodausta laajentamalla vaihtaa lause, joten sitä voidaan käyttää joko lauseena tai lausekkeena. Tämä antaa sekä lauseille että lausekkeille mahdollisuuden käyttää joko "perinteistä" tai "yksinkertaistettua" ulottuvuutta ja ohjata virtauskäyttäytymistä. Nämä muutokset johtavat yksinkertaisempaan "jokapäiväiseen" koodaukseen ja valmistavat tietä mallien vastaavuuden käyttöön vaihtaa.

Kun Java-rakentajat siirtyvät tukemaan mallien sovittamista, Java-epäsäännöllisyydetvaihtaa lausunnosta on tullut esteitä. Näihin kuuluvat kytkinlohkojen oletusohjausvirtauskäyttäytyminen; kytkinlohkojen oletusarvoinen skaalaus, jossa lohkoa käsitellään yhtenä ainoana laajuutena; ja vaihda työskentelemään vain lausuntona. Nykyinen Java-malli vaihtaa lause seuraa tarkasti kieliä, kuten C ++, ja tukee oletusarvoisesti läpimurto-semantiikkaa. Tämä ohjausvirta on ollut hyödyllinen kirjoitettaessa matalan tason koodia. Mutta kun kytkintä käytetään korkeamman tason tilanteissa, sen virhealttius alkaa olla suurempi kuin joustavuus.

Basic benchmark -sarja

JDK 12 sisältää mikropisteiden perussarjan, jotka on lisätty alustan lähdekoodiin. Tavoitteena on helpottaa kehittäjien suorittamaan olemassa olevia vertailuarvoja tai rakentamaan uusia.

Heinäkuussa 2014 luotu ja marraskuun alussa 2018 päivitetty mikrobiologisarjapaketti oli Java Microbenchmark Harnessin (JMH) tukema Java- ja muilla JVM-kielillä kirjoitettujen vertailuarvojen rakentamiseksi. Paketti on sijoitettu JDK-lähdekoodilla yhteen hakemistoon, ja kehittäjät voivat helposti lisätä uusia vertailuarvoja.

Tavoitteena ei ollut tarjota vertailuarvoja uusille JDK-ominaisuuksille tai luoda täydellinen joukko vertailuarvoja, jotka kattavat kaiken JDK: n. Huomaa myös, että vertailupakettia ei vaadita tavallisissa JDK-koontiversioissa, mutta se on erillinen koontikohde.

Ehdotuksessa kehotettiin luomaan uusi sivu wiki.openjdk.java.net-sivustolle selittääkseen, kuinka vertailuarvoja kehitetään ja vaatimuksia kuvataan. Nämä vaatimukset edellyttävät koodausstandardien, toistettavan suorituskyvyn ja dokumentoinnin noudattamista.

JDK 12 -päivitykset

Suunnitelmien mukaan JDK 12 saa kaksi päivitystä, ennen kuin JDK 13 seuraa häntä kuuden kuukauden kuluessa. JDK 12 on osa Oraclen kuuden kuukauden julkaisutahdistusta, joka otettiin käyttöön JDK 9: n kanssa syyskuussa 2017. JDK 12 on luonnehdittu ominaisuusjulkaisuksi, toisin kuin JDK 11, joka on pitkäaikainen tukijulkaisu, johon on suunniteltu useita vuosia tukea.

$config[zx-auto] not found$config[zx-overlay] not found