3 skäl att uppgradera till Java 10

Uppgradera

Undersökningar visar att en förkrossande majoritet (90+ %) av de produktionssystem som är utvecklade i Java fortfarande körs på Java 8 eller tidigare (!). Även om ni är en av de fåtal som uppgraderat till Java 9 så finns det anledning att snegla på Java 10. Flera av våra kunder väntar in Java 11 (nästa LTS-release). Vi rekommenderar trots det generellt att uppgradera redan nu för att göra migreringen till Java 11 mer sömlös när det väl blir dags. Vi väljer därför att här presentera tre mycket goda skäl till varför man bör överväga att uppgradera idag.

1. Förbättrad Docker integration

Tidigare versioner av Java har stött på en del patrull när JVMen körs i en (Linux) container. Utmaningarna har varit kring minnes- och CPU- tilldelning/nyttjande vilket lett till försämrad prestanda. Anledningen är att JVMen historiskt inte förstått att den körts i en container. I Java 10 känner JVMen däremot igen och efterföljer de begränsningar som sätts via ‘container control groups’ (cgroups). Följande begränsningar som definieras i containern passas nu vidare till JVMen:

  • Minnestilldelnings-begränsningar
  • Antal tillgängliga CPUs
  • CPU begränsningar

Detta är guld värt när det gäller att optimera resursnyttjande i en setup med många Java Microservices som körs i Docker containers.

2. Lokal variabeltypsslutledning

Långt och krångligt begrepp på svenska, en aning tjusigare på engelska: Local-Variable Type Inference. Det handlar om att Java äntligen infört stöd för att baserat på objektet som skapas härleda typen av variabel, t.ex. en lista.

Exempel:

// Java <10, notera att List.of introducerades i Java 9
List<Integer> numbers = List.of(1, 3, 3, 7);
// Java >=10
var numbers = List.of(1, 3, 3, 7);

for (var number : numbers)  {
    System.out.println(number);
}

Det skall noteras att ‘var’ kommer med ett antal begränsningar. Nedan kodrader fungerar inte.

// deklarera en variabel utan att initiera den
var x;

// sammansatt deklaration
var x, y = 0;

// initiera med null-värde
var x = null;

3. Förbättrad full GC för G1an

Java 9 ändrade default garbage collectorn till G1. Den är designad att undvika full Garbage Collection (GC), men i det fall parallella upprensningar inte kunde återvinna minne snabbt nog så faller G1an tillbaka på full GC vilket skapar en del bekymmer.

Java 10 förbättrar detta (ovanliga) scenario genom att parallellisera mark-sweep-compact algoritmen för full GC i G1an vilket gör att samma antal trådar som nyttjas för vanliga upprensningar även kan nyttjas vid full GC.

Sammanfattning

Oavsett vilken tidigare version av Java ni använder just nu är det värt att undersöka om det finns godbitar i de nyare versionerna av Java som kan vara er till gagn. Det finns nämligen utöver de features som tagits upp här ett antal ytterligare nya features i Java 9 samt 10 som kan göra er vardag ännu bättre.

Nyfiken på att höra mer om vad vi gör? Om ja, tveka inte utan hör av er till oss omgående!

Vi har mottagit ditt meddelande och återkommer inom kort.
Hoppsan! Något gick dessvärre fel, vänligen verifiera att du inte är en robot eller ladda om sidan och försök igen.
Vi vill göra dig uppmärksam på att vi behandlar dina uppgifter i strikt enlighet med vår Integritetspolicy. Allt för att du ska känna dig trygg i att vi värnar om din integritet.