Java 11 LTS: płatna czy darmowa?

Java JDK 11 wreszcie wersją LTS

Java 11 została oznaczona jako wersja LTS (ang. Long Term Support), co w praktyce sprawia, że jest ona faktycznym następcą Java 8. Dzieje się tak dlatego, że większość większych firm woli opierać swój software na bibliotekach, których autorzy zapewniają długie i najlepiej bezpłatne wsparcie. Jest to szczególnie ważne dla wszelkiego rodzaju instytucji finansowych oraz publicznych, gdzie kładzie się nacisk na bezpieczeństwo aplikacji.

Dotąd polityka firmy Oracle opierała się na udostępnianiu wszelkiego poprawek, mających na celu likwidację luk bezpieczeństwa za darmo. Oczywiście nie wszystkie wersje Java były cały czas wspierane, raczej skupiano się na wersjach najnowszych. W ten sposób łatano JDK 7 aż do 2019, a JDK 8 aż do marca 2022. Dodatkowo Oracle umożliwiał wykupienie dalszego rozszerzonego wsparcia o kolejne lata do niektórych wersji (np. płatne łatki do JDK 7 pojawiać się będą do czerwca 2022).

Od wersji 8 Oracle podzielił wydawane wersje na tzw. LTS i non-LTS, gdzie te drugie wspierane są przez zaledwie pół roku. Dlatego właśnie większość programistów skupia się przede wszystkim na wersjach LTS, traktując non-LTS bardziej jako patch do poprzedniej JDK z rozszerzonym wsparciem. Od Java 11 nastąpiła kolejna zmiana. Jakiekolwiek wsparcie dla Oracle JDK, będzie płatne w formie subskrypcji. Nie jest to jednak problem, bowiem na Oracle JDK opiera się darmowa Open JDK.

Mówiąc wprost, jeśli zależy Ci na bezpieczeństwie i potrzebujesz rozszerzonego wsparcia ze strony programistów Java, wybierasz wersje Oracle JDK, jeśli wystarczy Ci aktualizacja raz na pół roku (co tyle wychodzi nowa wersja) to możesz śmiało korzystać z Open JDK. Jeśli dopiero się uczysz programować, nie ma to znaczenia, bowiem licencja nie obowiązuje w przypadku użytkowania prywatnego. Ostatnia ważna zmiana, jeśli używałeś wcześniej Java JRE (Runtime Environment), np. do odpalenia starych aplikacji, to niestety muszę Cię zmartwić bo JRE nie będzie już wydawane (tylko JDK).

Nowe metody w klasie String

W Java 11 JDK największą zmianą pod względem samego języka, jest stworzenie nowego API dla Stringów. Dodane metody powinny znacznie ułatwić manipulację danymi tekstowymi. Oto one:

lines – przekształca String w strumień, dzieląc go po liniach

repeat – powiela String podaną liczbę razy

strip – usuwa początkowe i końcowe spacje

stripLeading – usuwa tylko wiodące spacje

stripTrailing – usuwa tylko końcowe spacje

isBlank – zwraca prawdę, gdy natrafi na element który jest pusty lub zawiera białe spacje

String text = "I am \n developeronthego.pl \n \nreader.";
List<String> lines = text.lines()
		.filter(Predicate.not(String::isBlank))
		.map(String::strip)
		.collect(Collectors.toList());
		
String title = " developeronthego.pl ";
System.out.println(title.repeat(2));
System.out.println(title.stripLeading());
System.out.println(title.stripTrailing());

Nowe mody do pracy z plikami

Programiści Javy wreszcie udostępnili łatwe w użytku metody do tworzenia i wczytywaniu plików. We wcześniejszych wersjach często wymagało to przynajmniej kilku linii kodu. Tymczasem teraz nowe implementacje pozwalają na praktycznie jednolinijkowy zapis.

Path filePath = Files.writeString(Path.of("note.txt"), "My new note on blog.");
Files.readString(filePath);

Ułatwiona konwersja z kolekcji do tablicy

Mała zmiana zaszła w kolekcjach. Uproszczono znacznie konwersję na tablicę. Od teraz można wykorzystać zapisu znanego z Java 8 (reference method) bez wpisywania długości tablicy.

List<String> examples = Arrays.asList("Developer", "on", "the", "go");
examples.toArray(new String[examples.size()]); // old way
examples.toArray(String[]::new); // JDK 11

Warunek Not w predykatach

Od Java 11 istnieje możliwość odwracania wyniku wyrażeń, zwracających wartości logiczne, które później mogły być wykorzystywane w predykatach. Upraszcza to często strukturę samego streamu.

List<String> sampleList = Arrays.asList("Ala", "ma", "kota", " ");
String withoutBlanks = sampleList.stream()
	.filter(Predicate.not(String::isBlank))	  
	.collect(Collectors.joining(","));

W wyniku dostajesz złączony napis, bez zbędnego elementu zawierającego spację (warunek isBlank).

Var w wyrażeniach lambda

Java 11 udoskonaliła odrobinę działanie zmiennych typu var, które weszły w skład JDK w wersji 10.

Predicate<String> predicate = a -> true; // old
Predicate<String> varPredicate = (var a) -> true; // new

Jak widzisz teraz można podstawić var przed lambdą. Pewnie zadasz pytanie: ale właściwie to po co? Dzięki takiemu zapisowi można postawić przed wyrażeniem lambda adnotację (np. popularne w bibliotece Lombok** nullchecki typu @Nonnull).

HTTP Client

Eksperymentalny nowy klient HTTP, który był już dostępny w JDK 9. W Java 11 można już korzystać z niego oficjalnie.

HttpClient httpClient = HttpClient.newBuilder()
         .version(HttpClient.Version.HTTP_2)
         .connectTimeout(Duration.ofSeconds(10))
         .build();          
try {
     HttpRequest request = HttpRequest.newBuilder()
		            .GET()
		            .uri(URI.create("https://developeronthego.pl"))
		            .build();                              
     HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); 

     System.out.println("Status code: " + response.statusCode());                            
} catch (IOException | InterruptedException e) {
     e.printStackTrace();
}

Wydajność

W kolejnym wydaniu JDK oczywiście nie mogło zabraknąć poprawienia wydajności samej platformy.

  • Dodano nowy Garbage Collector o nazwie Epsilon (na razie jako feature eksperymentalny)
  • Ulepsz istniejące wewnętrzne mechanizmy ciągów i tablic oraz zaimplementuj nowe mechanizmy wewnętrzne dla funkcji sin, cos i log java.lang.Math na procesorach AArch64
  • Dodano opcjonalne wsparcie dla nowego algorytmu obsługi puli stałych o nazwie CONSTANT_Dynamic
  • Udostępniono za darmo Java Flight Recorder (nowy profiler)

Dalsze odchudzanie JDK

Podążając ścieżką wytyczoną przez technologie mikroserwisowe, Oracle ostatecznie usunął moduły Java EE oraz Corba, które od Javy 9 były ustawione jako deprecated. Oznacza to, że w Java 11 nie uświadczymy następujących bibliotek:

  • java.xml.ws: Java API for XML Web Services (JAX-WS), Web Services Metadata for the Java Platform, and SOAP with Attachments for Java (SAAJ)
  • java.xml.bind: Java Architecture for XML Binding (JAXB)
  • java.xml.ws.annotation
  • java.corba: CORBA
  • java.transaction: Transaction Services
  • java.activation: JavaBeans Activation Framework
  • java.se.ee: Aggregator
  • jdk.xml.ws: narzędzia dla JAX-WS
  • jdk.xml.bind: narzędzia dla JAXB

Podsumowanie

Java 11 stanowi zwieńczenie wszystkich zmian pomiędzy wersjami 9 i 11. Większość z nich dotyczy drobnych usprawnień (głównie w streamach) oraz dodanie długo wyczekiwanych zmiennych var. Można też zauważyć tendencję do odchudzania JDK o mało używane feature’y.

*Mapa wydawania wersji JDK przez Oracle: https://www.oracle.com/java/technologies/java-se-support-roadmap.html

**Popularna biblioteka w Javie: https://projectlombok.org/

Kod do lekcji na jest dostępny na moim githubie.

Stay in the Loop

Get the daily email from CryptoNews that makes reading the news actually enjoyable. Join our mailing list to stay in the loop to stay informed, for free.

Ostatnio dodane

- Advertisement - spot_img

Powiązane wpisy