{"id":76573,"date":"2020-04-03T13:42:25","date_gmt":"2020-04-03T11:42:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno"},"modified":"2020-04-03T13:42:25","modified_gmt":"2020-04-03T11:42:25","slug":"nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","title":{"rendered":"La compilazione nativa in Quarkus: perch\u00e9 \u00e8 importante","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao a tutti! Questo \u00e8 il secondo post della nostra serie su Quarkus \u2013 oggi parleremo della compilazione nativa.<\/p>\n<p><img decoding=\"async\" alt=\"La compilazione nativa in Quarkus: perch\u00e9 \u00e8 importante\" src=\"\/wp-content\/uploads\/2020\/04\/3690313f6718405b06f0a6b5360767e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/03\/20\/quarkus-0-12-0-released\/\">Quarkus<\/a><\/noindex> \u2013 \u00e8 uno stack Java ottimizzato per <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>. E anche se ci sono ancora molte cose da fare, abbiamo lavorato bene su numerosi aspetti, inclusa l'ottimizzazione della JVM e di vari framework. Una delle caratteristiche di Quarkus che ha suscitato un grande interesse tra gli sviluppatori \u00e8 l'approccio integrato e fluido per trasformare il codice Java in file eseguibili per un sistema operativo specifico (la cosiddetta \"compilazione nativa\"), analogamente a C e C++, dove questa compilazione avviene solitamente alla fine di un ciclo di costruzione, test e distribuzione.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nE anche se, come mostreremo di seguito, la compilazione nativa \u00e8 importante, \u00e8 doveroso sottolineare che Quarkus funziona davvero bene anche su una normale macchina Java OpenJDK Hotspot grazie ai miglioramenti delle prestazioni che abbiamo implementato in tutto lo stack. Pertanto, la compilazione nativa pu\u00f2 essere considerata un bonus aggiuntivo, da utilizzare a piacere o necessit\u00e0. In effetti, per quanto riguarda le immagini native, Quarkus si basa in larga misura su OpenJDK. Inoltre, la modalit\u00e0 dev mode, ben accolta dagli sviluppatori, offre quasi un test immediato delle modifiche grazie alle avanzate capacit\u00e0 di esecuzione dinamica del codice implementate in Hotspot. Inoltre, nella creazione di immagini native, viene utilizzata la biblioteca di classi di OpenJDK e le funzionalit\u00e0 di HotSpot.<\/p>\n<p>Allora, perch\u00e9 \u00e8 necessaria la compilazione nativa se tutto \u00e8 gi\u00e0 cos\u00ec ben ottimizzato? Proveremo a rispondere a questa domanda qui di seguito.<\/p>\n<p>Iniziamo con l'ovvio: Red Hat ha una grande esperienza nell'ottimizzazione di JVM, stack e framework durante l'evoluzione del progetto <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/\">JBoss<\/a><\/noindex>, che include:<\/p>\n<ul>\n<li>Il primo server di applicazioni per il cloud sulla piattaforma <noindex><a rel=\"nofollow\" href=\"https:\/\/www.redhat.com\/en\/blog\/openshift-is-the-first-paas-to-support-java-ee-6-full-profile-in-the-cloud\">Red Hat OpenShift<\/a><\/noindex>.<\/li>\n<li>Il primo server di applicazioni per funzionare su computer <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/index.php\/videos\/youtube\/9c-g7UxT0nk\/\">Plug PC<\/a><\/noindex>.<\/li>\n<li>Il primo server di applicazioni per funzionare su <noindex><a rel=\"nofollow\" href=\"http:\/\/blog.arungupta.me\/wildfly-on-raspberry-pi-techtip-24\/\">Raspberry Pi<\/a><\/noindex>.<\/li>\n<li>Una serie di progetti funzionanti su dispositivi <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/iot\/android\/\">Android<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nDa molti anni ci occupiamo di eseguire applicazioni Java nel cloud e su dispositivi con risorse limitate (leggi, IoT) e abbiamo imparato a ottenere il massimo dalla JVM in termini di prestazioni e ottimizzazione della memoria. Come molti altri, abbiamo gi\u00e0 lavorato a lungo con la compilazione nativa delle applicazioni Java tramite <noindex><a rel=\"nofollow\" href=\"https:\/\/gcc.gnu.org\/wiki\/GCJ\">GCJ<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/readytalk.github.io\/avian\/\">Avian<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.excelsiorjet.com\/\">Excelsior JET<\/a><\/noindex> e persino <noindex><a rel=\"nofollow\" href=\"https:\/\/source.android.com\/devices\/tech\/dalvik\">Dalvik<\/a><\/noindex> e comprendiamo bene i pro e i contro di questo approccio (ad esempio, il dilemma tra la versatilit\u00e0 \"build once \u2013 run-anywhere\" e il fatto che le applicazioni compilate hanno dimensioni minori e si avviano pi\u00f9 rapidamente).<\/p>\n<p>Perch\u00e9 \u00e8 cos\u00ec importante considerare questi pro e contro? Perch\u00e9 in alcune situazioni il loro rapporto diventa decisivo:<\/p>\n<ul>\n<li>Ad esempio, in ambienti serverless\/gestiti dagli eventi, dove <noindex><a rel=\"nofollow\" href=\"https:\/\/mikhail.io\/2018\/08\/serverless-cold-start-war\/\">i servizi devono necessariamente avviarsi<\/a><\/noindex> in modalit\u00e0 (rigida o morbida) real-time, per poter rispondere agli eventi. A differenza dei servizi persistenti a lungo termine, qui la durata dell'avvio a freddo aumenta criticamente il tempo di risposta alle richieste. L'avvio della JVM richiede ancora un notevole tempo e, sebbene in alcuni casi possa essere ridotto mediante metodi puramente hardware, la differenza tra un secondo e 5 millisecondi pu\u00f2 essere una questione di vita o di morte. S\u00ec, qui si pu\u00f2 giocare con la creazione di riserve calde di macchine Java (cosa che abbiamo fatto, ad esempio, durante <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/projectodd\/kwsk\">il porting di OpenWhisk su Knative<\/a><\/noindex>), ma di per s\u00e9 questo non garantisce un numero sufficiente di JVM per gestire le richieste man mano che il carico aumenta. E sotto il profilo economico, sicuramente non \u00e8 l'opzione pi\u00f9 giusta.<\/li>\n<li>Inoltre, c'\u00e8 un altro aspetto frequentemente sollevato, come la multitenancy. Anche se le JVM hanno avvicinato molto le loro capacit\u00e0 a quelle dei sistemi operativi, non sono ancora in grado di fare ci\u00f2 a cui siamo cos\u00ec abituati su Linux \u2013 isolare i processi. Pertanto, il guasto di un thread pu\u00f2 compromettere l'intera macchina Java. Molti cercano di aggirare questo difetto dedicando a ciascun utente una JVM separata per le applicazioni, al fine di ridurre al minimo le conseguenze del guasto. Questo ha una logica, ma si sposa male con la scalabilit\u00e0.<\/li>\n<li>Inoltre, per le applicazioni orientate al cloud, \u00e8 importante un indicatore come la densit\u00e0 dei servizi sull'host. La transizione verso la metodologia <noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12 fattori dell\u2019applicazione<\/a><\/noindex>, i microservizi e Kubernetes aumentano il numero di macchine Java per un'applicazione. Da un lato, tutto ci\u00f2 offre elasticit\u00e0 e affidabilit\u00e0, ma allo stesso tempo cresce anche il consumo di memoria di base per servizio, e parte di queste spese non \u00e8 sempre strettamente necessaria. I file eseguibili compilati staticamente vincono qui grazie a varie tecniche di ottimizzazione, come l'eliminazione del codice morto a basso livello, quando nell'immagine finale vengono incluse solo le parti dei framework (incluso lo stesso JDK) che il servizio utilizza effettivamente. Pertanto, la compilazione nativa di Quarkus aiuta a collocare pi\u00f9 densamente le istanze dei servizi sull'host senza compromettere la sicurezza.<\/li>\n<\/ul>\n<p>\nIn effetti, le argomentazioni sopra menzionate sono gi\u00e0 sufficienti per comprendere la giustificazione della compilazione nativa dal punto di vista dei partecipanti al progetto Quarkus. Tuttavia, c'\u00e8 un'altra ragione, non tecnica, ma altrettanto importante: negli ultimi anni molti programmatori e aziende di sviluppo hanno abbandonato Java a favore di nuovi linguaggi di programmazione, ritenendo che Java con le sue JVM, stack e framework sia diventata troppo esigente in termini di memoria, troppo lenta, ecc.<\/p>\n<p>Tuttavia, l'abitudine di utilizzare lo stesso strumento per risolvere qualsiasi problema \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/java\/comments\/8xv3ha\/does_anybody_use_spring_boot_with_aws_lambda_do\/\">non \u00e8 sempre corretta<\/a><\/noindex>. A volte \u00e8 meglio fare un passo indietro e cercare qualcosa di diverso. E se Quarkus costringe le persone a fare una pausa e riflettere, \u00e8 positivo per l'intero ecosistema Java. Quarkus rappresenta una visione innovativa su come creare applicazioni pi\u00f9 efficienti, rendendo Java pi\u00f9 rilevante per nuove architetture di applicazione, come quelle serverless. Inoltre, grazie alla sua estensibilit\u00e0, Quarkus, speriamo, svilupper\u00e0 un'intera ecosistema di estensioni Java, aumentando notevolmente il numero di framework che supporteranno nativamente la compilazione come parte delle applicazioni.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/495212\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 \u043f\u043e Quarkus \u2013 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. Quarkus \u2013 \u044d\u0442\u043e Java-\u0441\u0442\u0435\u043a, \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 Kubernetes. \u0418 \u0445\u043e\u0442\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043d\u043e\u0433\u043e\u0435 \u0435\u0449\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043c\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043c\u0430\u0441\u0441\u0443 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e JVM \u0438 \u0446\u0435\u043b\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 Quarkus, \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u0439 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0441\u0442\u0430\u043b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":76574,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-76573","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\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\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno\" \/>\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\u041d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 Quarkus \u2013 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno\" \/>\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=\"2020-04-03T11:42:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-03T11:42:25+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\udd47Compilazione nativa in Quarkus \u2013 perch\u00e9 \u00e8 importante | ProHoster","description":"Ciao a tutti!","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","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\u041d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 Quarkus \u2013 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","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":"2020-04-03T11:42:25+00:00","article:modified_time":"2020-04-03T11:42:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"76573","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-02-28 17:34:49","updated":"2022-09-28 02:06:54","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\/76573","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=76573"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/76573\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/76574"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=76573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=76573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=76573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}