23 decembrie 2022

What’s New in Java 11 - partea 2

Ce e nou introdus

java.net.HttpURLConnection -> HttpClient, HttpRequest, HttpResponse

Exemplu #1:











Exemplu #2:















- CompletableFuture a fost introdus în Java8, pentru apeluri asincrone

- join este necesar pentru a aștepta unirea thread-ului curent (main) cu cel care face apelul Http; pentru ca programul să nu se termine înainte de primirea răspunsului


Ce e nou în librării

String:

> "he".repeat(3); // "hehehe"

> "".isBlank(); // true

> "\n\t    text     \u2005".strip();  // "text"

> "1 \n 2 \n 3 \n 4".lines().forEach(System.out::println);   // scrie pe linii noi 1 2  3  4

   

Files:

String readString (Path path);

Path writeString(Path path, CharSequence cs, OpenOptions options);


Optional:  Optional.ofNullable(null).isEmpty();  // true

Predicate::not


Unicode 10

  • update de la Unicode 8 (Java 10)
  • sunt adăugate mai mult de 16.000 caractere noi
  • caracterele aparțin la 10 sisteme de scriere noi, printre care și cel nepalez


Inferența tipului de variabilă locală cu var:

> var name = "Ana";

> (@Nonnull var a, @Nullable var b) -> a.concat(b)










Performanță și securitate

Garbage collector: G1 GC (încă din Java 9)

Noutate: Epsilon GC = rulare fără GC până când crapă aplicația = No GC paradigm

- pt aplicații predictibile în ce privește consumul de memorie, eventual cu o durată de viață mică

- util pt testarea performanței unei aplicații

- este o opțiune experimentală: -XX:+UnlockExperimentalVMOptions, -XX:+UseEpsilonGC

Noutate: Z Garbage Collector

- ia pauză sub 10 secunde

- durata pauzei e constantă (nu crește odată cu heap size)

- disponibil doar în Linux x64: -XX:+UnlockExperimentalVMOptions, -XX:+UseZGC


TLS 1.3 = transport layer security (asemănător https)

11 decembrie 2022

What’s New in Java 11 - partea 1

Java - acum este lansată o dată la 6 luni

Java 11 - marcat pentru suport pe termen lung (LTS)

LTS este doar pentru Oracle JDK (cu subscripție); pentru OpenJDK suportul este de 6 luni, până la următorul release


Java 9: module system

Java 10: local variable type inference

Java 11

  • convergența Oracle JDK cu OpenJDK (singura diferență rămâne LTS)
  • lansat în 2018, în același an cu Java 10; noul plan este de 2 release-uri pe an, cu un LTS o dată la 3 ani („garanția” este minim 3 ani pt produs)
  • poți compila direct java Hello.java (în loc să treci prin pasul intermediar de creare class file) - este limitat la un singur fișier sursă; nu se creează un fișier .class
  • fișier care poate fi rulat ca script (dacă este prefixat cu #! ./bin/java --source 11) - fișierul poate să aibă orice extensie (dacă nu era script se primea eroare)


Deprecări

API-uri scoase din JDK: 

  • java.xml.bind (JAXB) -> jaxb-api & jaxb-impl din javax.xml.bind respectiv com.sun.xml.bind
  • java.xml.ws, java.xml.ws.annotation
  • java.corba
  • java.transaction 
  • java.activation

Metode scoase:

  • destroy & stop(Throwable) din Thread
  • runFinalizersOnExit din java.lang.System & java.lang.Runtime
  • 4 metode din SecurityManager (la functionalitati awt care nu mai sunt suportate)

JavaFX

  • a făcut parte din Oracle JDK 8, 9, 10
  • nu mai face parte din Oracle JDK 11 -> mutat în OpenJFX
  • Javapackager scos -> este propus jpackager

Tehnologii scoase:

  • applet 
  • Java Web Start -> jlink, jpackager?
  • Nashorn (marcat ca deprecated)