{"id":99453,"date":"2021-03-17T04:22:35","date_gmt":"2021-03-17T02:22:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/vypusk-java-se-16"},"modified":"2021-03-17T04:22:35","modified_gmt":"2021-03-17T02:22:35","slug":"vypusk-java-se-16","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/news\/vypusk-java-se-16","title":{"rendered":"Uscita di Java SE 16","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 16 (Java Platform, Standard Edition 16), di cui utilizza come implementazione di riferimento il progetto open source OpenJDK. In Java SE 16 \u00e8 mantenuta la compatibilit\u00e0 retroattiva con le versioni precedenti della piattaforma Java; tutti i progetti Java scritti in precedenza funzioneranno senza modifiche quando eseguiti con la nuova versione. Le versioni pronte per l'installazione di Java SE 16 (JDK, JRE e Server JRE) sono disponibili per Linux (x86_64, AArch64), Windows e macOS. L'implementazione di riferimento di Java 16, sviluppata nell'ambito del progetto OpenJDK, \u00e8 completamente open source sotto licenza GPLv2 con eccezioni GNU ClassPath, che consentono il collegamento dinamico con prodotti commerciali.     <\/p>\n<p>Java SE 16 \u00e8 classificato tra le versioni con supporto standard, con aggiornamenti che verranno rilasciati fino al successivo rilascio. Per una versione con supporto a lungo termine (LTS), si consiglia di utilizzare Java SE 11, con aggiornamenti previsti fino al 2026. Il prossimo rilascio LTS \u00e8 previsto per settembre 2021. Ricordiamo che a partire dal rilascio di Java 10, il progetto ha adottato un nuovo processo di sviluppo, caratterizzato da un ciclo di rilascio pi\u00f9 breve. La nuova funzionalit\u00e0 viene ora sviluppata in un master branch aggiornato regolarmente, nel quale vengono inclusi i cambiamenti gi\u00e0 pronti e dal quale si diramano ogni sei mesi rami per la stabilizzazione delle nuove versioni.       <\/p>\n<p>Nella preparazione della nuova versione, lo sviluppo \u00e8 stato trasferito dal sistema di gestione delle versioni Mercurial a Git e alla piattaforma di collaborazione GitHub. Ci si aspetta che la migrazione migliori le prestazioni delle operazioni con il repository, aumenti l'efficienza dell'archiviazione, garantisca l'accesso alle modifiche in tutta la storia del progetto, migliori il supporto alla revisione del codice e utilizzi le API per automatizzare i flussi di lavoro. Inoltre, l'uso di Git e GitHub rende il progetto pi\u00f9 attraente per i principianti e per gli sviluppatori abituali di Git.    <\/p>\n<p>Tra le novit\u00e0 di Java 16, si possono notare:  <\/p>\n<ul>\n<li class=\"l\"> Aggiunto il modulo sperimentale jdk.incubator.vector con l'implementazione dell'API Vector, che offre funzioni per calcoli vettoriali eseguiti utilizzando le istruzioni vettoriali dei processori x86_64 e AArch64, consentendo di applicare operazioni simultaneamente a pi\u00f9 valori (SIMD). A differenza delle capacit\u00e0 di auto-vettorializzazione delle operazioni scalari fornite dal compilatore JIT HotSpot, la nuova API consente di gestire esplicitamente la vettorializzazione per l'elaborazione parallela dei dati.\n<li class=\"l\"> Nel codice JDK e VM HotSpot, scritto in C++, \u00e8 permesso utilizzare le funzionalit\u00e0 introdotte dalla specifica C++14. In precedenza era consentito utilizzare gli standard C++98\/03.\n<li class=\"l\"> Nel garbage collector ZGC (Z Garbage Collector), operante in modalit\u00e0 passiva e che minimizza al massimo le latenze dovute alla raccolta dei rifiuti, \u00e8 stata aggiunta la possibilit\u00e0 di elaborazione parallela degli stack dei thread senza sospendere l'esecuzione dei thread dell'applicazione. In ZGC rimangono ora solo le operazioni che richiedono una sospensione, che hanno ritardi costanti, solitamente non superiori a poche centinaia di microsecondi.\n<li class=\"l\"> Nelle classi SocketChannel, ServerSocketChannel e java.nio.channels \u00e8 stata aggiunta la supporto per i socket Unix (AF_UNIX).\n<li class=\"l\"> Realizzato un porting per la distribuzione Linux Alpine con la libreria C standard musl, popolare in ambienti per container, microservizi, cloud e sistemi embedded. Il porting proposto in tali ambienti consente di eseguire programmi Java come normali applicazioni. Inoltre, utilizzando jlink si possono rimuovere tutti i moduli non utilizzati e creare un ambiente minimo sufficiente per eseguire l'applicazione, permettendo di generare immagini compatte specifiche per applicazioni.\n<li class=\"l\"> \u00c8 stato realizzato un meccanismo Elastic Metaspace, che ottimizza le operazioni di allocazione e restituzione della memoria occupata dai metadati delle classi (metaspace) nella JVM HotSpot. L'uso di Elastic Metaspace riduce la frammentazione della memoria, diminuisce le spese generali nel caricatore di classi e influisce positivamente sulle prestazioni delle applicazioni server a lungo termine grazie a un pi\u00f9 rapido ritorno alla sistema operativo della memoria occupata dai metadati delle classi non utilizzati. Per scegliere la modalit\u00e0 di rilascio della memoria dopo il caricamento delle classi, \u00e8 stata proposta l'opzione &#171;-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)&#187;.\n<li class=\"l\"> Aggiunto il port JDK per sistemi Windows che operano su hardware con processori basati sull'architettura AArch64.\n<li class=\"l\"> Proposto un terzo tentativo preliminare dell'API Foreign-Memory Access, che consente alle applicazioni Java di accedere in modo sicuro ed efficiente alle aree di memoria al di fuori dell'heap Java, manipolando le nuove astrazioni MemorySegment, MemoryAddress e MemoryLayout.\n<li class=\"l\"> Implementato un API sperimentale Foreign Linker, che offre accesso da Java a codice nativo. Insieme all'API Foreign-Memory, la nuova interfaccia semplifica notevolmente la creazione di wrapper per comuni librerie condivise.\n<li class=\"l\"> Aggiunto lo strumento jpackage, che consente di creare pacchetti per applicazioni Java autonome. Lo strumento si basa su javapackager di JavaFX e permette di generare pacchetti in formati nativi per diverse piattaforme (msi ed exe per Windows, pkg e dmg per macOS, deb e rpm per Linux). I pacchetti includono tutte le dipendenze necessarie.\n<li class=\"l\"> Attivata per impostazione predefinita la rigorosa incapsulazione di tutti gli elementi interni del JDK, tranne le API critiche, come sun.misc.Unsafe. Il valore dell'opzione &#171;&#8212;illegal-access&#187; \u00e8 ora impostato per impostazione predefinita a &#171;deny&#187; invece che a &#171;permit&#187;, il che porter\u00e0 al blocco dei tentativi di accesso da codice alla maggior parte delle classi, metodi e campi interni. Per aggirare questa limitazione, utilizzare l'opzione &#171;&#8212;illegal-access=permit&#187;.\n<li class=\"l\"> Stabilizzata l'implementazione del matching con il pattern nell'operatore &#171;instanceof&#187;, che consente di definire immediatamente una variabile locale per accedere al valore verificato. Ad esempio, \u00e8 possibile scrivere subito &#171;if (obj instanceof String s &#038;&#038; s.length() &gt; 5) {.. s.contains(..) ..}&#187; senza definire esplicitamente &#171;String s = (String) obj&#187;.     Prima:       if (obj instanceof Group) {       Group group = (Group) obj;       var entries = group.getEntries();     }    Ora \u00e8 possibile evitare di definire &#171;Group group = (Group) obj&#187;:       if (obj instanceof Group group) {       var entries = group.getEntries();     }\n<li class=\"l\"> La realizzazione della parola chiave \u00abrecord\u00bb \u00e8 stata stabilizzata, fornendo una forma compatta per definire classi, che consente di evitare la definizione esplicita di vari metodi a basso livello, come equals(), hashCode() e toString(), nei casi in cui i dati vengono salvati solo nei campi, il cui comportamento non cambia. Quando una classe utilizza implementazioni di tipo dei metodi equals(), hashCode() e toString(), \u00e8 possibile evitare la loro definizione esplicita: public record BankTransaction(LocalDate date, double amount, String description) {}\n<p>Questa dichiarazione porter\u00e0 all'aggiunta automatica delle implementazioni dei metodi equals(), hashCode() e toString() oltre al costruttore e ai metodi che controllano la modifica dei dati (getter).      <\/p>\n<li class=\"l\"> \u00c8 stata proposta una seconda versione preliminare delle classi e interfacce sigillate (\u00absealed\u00bb), che non possono essere utilizzate da altre classi e interfacce per ereditare, estendere o sovrascrivere implementazioni. Le classi sigillate offrono anche un modo pi\u00f9 dichiarativo per limitare l'uso della superclasse, rispetto ai modificatori di accesso, basato sull'elenco esplicito delle sottoclassi consentite per l'estensione. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {...}        <\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=54769\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 16 (Java Platform, Standard Edition 16), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK. \u0412 Java SE 16 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c\u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Java, \u0432\u0441\u0435 \u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 Java-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-99453","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 16 (Java Platform, Standard Edition 16), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/news\/vypusk-java-se-16\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a Java SE 16 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 16 (Java Platform, Standard Edition 16), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/news\/vypusk-java-se-16\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2021-03-17T02:22:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-03-17T02:22:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Rilascio Java SE 16 | ProHoster","description":"Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 16 (Java Platform, Standard Edition 16), utilizzando il progetto open source OpenJDK come implementazione di riferimento.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/vypusk-java-se-16","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a Java SE 16 | ProHoster","og:description":"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Oracle \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Java SE 16 (Java Platform, Standard Edition 16), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 OpenJDK.","og:url":"https:\/\/prohoster.info\/it\/blog\/news\/vypusk-java-se-16","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2021-03-17T02:22:35+00:00","article:modified_time":"2021-03-17T02:22:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"99453","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-17 02:50:53","updated":"2022-09-27 17:21:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/99453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=99453"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/99453\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=99453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=99453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=99453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}