Főoldal

"Mérnököt a mérnöktől"

A Schönherz Bázis összeköti az állást kereső és állást kínáló mérnököket.

CV küldés

Küldj önéletrajzot! Gyorsan, egyszerűen.
Megjegyzésbe írd be a pozíció nevét.
CV küldés

Iratkozz fel hírlevelünkre!

Kövess minket!

Kövess minket!

Hírek

Megjelent a Java 10: 10 új funkció, amit érdemes tudnod
Megjelent a Java 10: 10 új funkció, amit érdemes tudnod

Mialatt mi a Java 9-ről beszélünk, és néhányan a projektekben még a Java 8-ra sem tértek át és már is itt van a Java új kiadása, a JDK 10, ami letölthető az Oracle weblapjáról. Ez az első kiadás az új ütemtervben, ahol hathavonta forgalomba hoznak egy új Java változatot. A féléves megjelenéseken kívül minden harmadik évben jön egy új LTS, mely tulajdonképpen egy nagyobb Java kiadás. A következő LTS megjelenés a Java 11, mely szeptemberben jön ki. Ezután három évvel lehet majd a következő verzióra frissíteni.

Annak ellenére, hogy a JDK 10 nagyon hirtelen jött, még úton van pár érdekes feature.  Itt egy gyors összefoglaló ezekről a funkciókról:


1. Lokális változó típuskövetkeztetése (JEP 286)

Hasonlóan, mint a JavaScript, a Kotlin és a Scala, most már a Java is rendelkezni fog a var kulcsszóval, mely lehetővé teszi egy változó deklarálását a típusának specifikálása nélkül. A típust a fordítóprogram a környezetből fogja kikövetkeztetni. Például, ha azt írod, hogy var name = „Java”, a compiler már tudni fogja, hogy a változó típusa String.

Nem tudom, hogy ez mennyire lesz hasznos, mivel egészen hozzászokhattunk az int i = 0 vagy a String name =Java” kifejezésekhez, és hasznos volt, hogy a változó deklarációja magában hordozta a típus információt. De úgy tűnik, hogy a Java követi a Scala és a Kotlin útját, és afelől próbál változásokat beépíteni.

Azt viszont jobb, ha tudjuk, hogy a var kulcsszó csak lokális változók létrehozásánál használható, vagyis csak metódusok belsejében vagy kódblokkokban lévő változókra – nem használható adattag deklarációjakor az osztály törzsében.

Ettől függetlenül a Java nem lesz egy dinamikusan típusozott nyelv, mint mondjuk a Python. A Java még mindig egy statikusan típusos nyelv maradt, és ha egyszer meghatározod a változó típusát, akkor azt már nem tudod megváltoztatni. Például a var name = „Java” kifejezés rendben van, de ezután nem írhatod le azt, hogy name = 3.

Ahogy Sander Mak fogalmaz a What’s New in Java 10 nevű Pluarlsight kurzusán, ez a Java 10 egyik legszembetűnőbb funkciója, mely lecsökkenti a lokális változók létrehozásához szükséges kódismétlést.

Ez nem ilyen egyértelmű ebből az egyszerű példából, de képzeljünk el egy metódust, mely visszaad egy komplex listatípust, ahol rengeteg csúcsos zárójelre és generikus típusra van szükségünk, hogy deklaráljuk a típust. Ezekben az esetekben ez rengeteg időt takarít meg.


var list = List.of(1, 2.0, "3")

Itt a lista egy List<? extends Serializable & Comparable<…>> típusként lesz értelmezve, ami egy metszettípus.


2. Időalapú verziókiadás (JEP 322)

Az új JDK megjelenésével a Java felvett egy új kiadási ritmust, minden hatodik hónapot célbavéve. Rengeteg vita folyik arról, hogy ez egy praktikus megközelítés-e. Sokan mondják, hogy szeretnek hathavonta új funkciókat kapni, mások pedig panaszkodnak, hogy hat hónap túl kevés idő egy JDK verzió megszokására.

Akárhogy is, mostantól ez lesz az új irány, egy új LTS megjelenésével minden harmadik évben.

Emellett a verziószám mindig egy hónappal a Feature elem növelése után fog nőni, szóval a 2018. áprilisi verzió lesz a JDK 10.0.1, a 2018. júliusi verzió neve JDK 10.0.2 lesz, és így tovább.


3. Szemétgyűjtő interfész (JEP 304)

Ez egy a Java 10 érdekesebb és hasznos funkciói közül. Növeli a kód izoláltságát a különböző szemétgyűjtőktől, és bevezet számukra egy letisztult interfészt.

Ez annyit jelent, hogy könnyebb lesz kizárni a Garbage Collectort (GC-t) egy JDK szerkezetből, miközben megkönnyíti az új GC hozzáadását is anélkül, hogy az befolyásolná a kód alapját. Ha többet akarsz megtudni a G1 Garbage Collection-ről, és a különbségről közte és a Concurrent Mark Sweep Garbage Collector között, akkor további információkat a Java Memory Management oldalon találsz.


4. Párhuzamos, teljes GC a G1-hez (JEP 307)

Itt egy újabb érdekes feature, mely a teljes GC párhuzamosításával javítja a G1 worst-case késleltetését.

Ha emlékszel a Java 9-es verziójára, a G1 volt a JVM alapértelmezett GC-je, mely a teljes GC kikerülésére volt hivatott. De amikor az egyidejű gyűjtések nem tudták elég gyorsan visszanyerni a memóriát, akkor az egész visszaesett újra a teljes GC-hez, ami viszont teremtett egy problémát.

Ez az új változtatás párhuzamosítani fogja a teljes GC algoritmust, így a teljes G1 GC valószínűtlen eseménye folyamán a szálak azonos mennyisége használható, mint az egyidejű gyűjtésekben, és így javul az általános teljesítmény.


5. Heap elhelyezése alternatív memóriaeszközökön (JEP 316)

Ez egy izgalmasnak hangzó feature. Annyit tesz, hogy engedélyezi a HotSpot VM használatát, így el tudjuk helyezni az objektum heap-et egy alternatív memóriaeszközön, melyet a felhasználó határoz meg.

Ez például lehetővé teszi a multi-JVM környezetekben, hogy a kisebb prioritású folyamatok az NV-DIMM memóriához legyenek hozzárendelve, és csak a magasabb prioritású feladatokat rendelje a DRAM-hoz.


6. Egyesítsük a JDK erdőt egyetlen tárolóvá

A Java 10 ezen új funkciója a takarításról szól. Egyesíti a JDK erdő számos raktárát egyetlen nagy tárolóba.


7. Gyökértanúsítványok (JEP 319)

Ez egy újabb fontos változás, amit a Java 10 hoz. Ha emlékszel, a JDK 10 az OpenJDK szoros közreműködésével készült, és ez látszik is ezen a funkción.

Biztosítani fogja számunkra a hozzáférést a gyökértanúsítványok hitelesítéséhez, még vonzóbbá téve az OpenJDK használatát a fejlesztők számára.

Emellett célja még az OpenJDK és az Oracle JDK verziók közti különbségek csökkentése. A kritikus biztonsági komponensek, mint például a TLS most már alapértelmezetten működni fognak az OpenJDK verziókban is.


8. Kísérleti Java-alapú JIT Compiler (JEP 317)

Ez egy újabb érdekes feature, mely megengedi a Graal, egy Java-alapú JIT compiler kísérleti fordítóként való használatát a Linux/x64 platformon.

Ha emlékszel, a Graal már a Java 9-ben megjelent újra, de most engedélyezni tudod a következő JVM paraméterekkel:


-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler


Ha nem találkoztál még a Graal-lal: ez egy új Java-alapú JIT fordító, mely egy kísérleti Ahead-of-Time (AOT) compiler alapja.

Azonban ne feledjük, hogy ez még kísérleti fázisban tart, így nem lehet produkció során használni.


9. Szálankénti handshake (JEP 312)

A Java 10 ezen funkciója lefekteti az alapokat a továbbfejlesztett VM teljesítményhez. Ezt úgy oldja meg, hogy globális VM mentés nélkül megengedi visszahívások végrehajtását az alkalmazás szálain. Ez azt jelenti, hogy a JVM leállíthat külön-külön szálakat is, nem csak mindet egyszerre.

A VM teljesítmény javításának céljából rengeteg kis fejlesztést is vittek véghez ezen feature részeként, vagy a JEP 312-n belül, mint például eltávolítottak néhány memóriakorlátot a JVM-ből és az irányított zárolás csak az egyes szálakat állítja le.


10. A Native-Header Generation Tool eltávolítása (JEP 313)

Ez egy újabb funkció, mely szintén a takarításra koncentrál. El fogja távolítani a javah eszközt a JDK-ból, mely egy különálló, JNI kód fordításánál header fájlokat generáló eszköz. Erre már nem lesz szükség, hiszen ezt javac-ben is meg lehet tenni.


A JDK-t ide kattintva tudod letölteni az Oracle oldaláról, ahol kipróbálhatod a rengeteg újdonságot.

Ennyi lett volna a Java 10 néhány érdekesebb funkciójáról. Emellett jött még sokkal több low-level és API változás, melyeket megtalálsz az Oracle hivatalos kiadási megjegyzéseiben.


(Forrás


Ha Te is kreatív, kihívásokkal teli mérnök állást keresel minõségi munkáltatónál, jó helyen jársz, mert a Schönherz Bázis épp azért jött létre, hogy Neked segítsen.
Gyere, nézz szét aktuális állásaink között!