{"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\/da\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","title":{"rendered":"Native compilation in Quarkus \u2013 why it matters","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hello everyone! Here\u2019s the second post in our series on Quarkus \u2013 today we\u2019ll talk about native compilation.<\/p>\n<p><img decoding=\"async\" alt=\"Native compilation in Quarkus \u2013 why it matters\" 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 it\u2019s a Java stack focused on <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>. And while there\u2019s still much to be done here, we\u2019ve worked through a lot of aspects, including JVM optimization and various frameworks. One of the features of Quarkus that has sparked keen interest among developers is the comprehensive seamless approach to transforming Java code into executable files for a specific operating system (the so-called 'native compilation'), similar to C and C++, where such compilation typically occurs at the end of a cycle consisting of building, testing, and deploying.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAnd although native compilation, as we will show below, is important, it should be noted that Quarkus actually works quite well on a standard Java machine using OpenJDK Hotspot, thanks to the performance improvements we\u2019ve implemented throughout the stack. Therefore, native compilation should be considered an additional bonus that can be used at will or necessity. In fact, when it comes to native images, Quarkus significantly relies on OpenJDK. Furthermore, the warmly received development mode provides near-instant testing of changes due to the advanced capabilities of dynamic code execution implemented in Hotspot. Additionally, when creating native images, GraalVM utilizes the OpenJDK class library and HotSpot capabilities.<\/p>\n<p>So why is native compilation necessary if everything is already well optimized? This is the question we will attempt to answer below.<\/p>\n<p>Let\u2019s start with the obvious: Red Hat has extensive experience in optimizing JVMs, stacks, and frameworks throughout the project\u2019s development. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/\">JBoss<\/a><\/noindex>, including:<\/p>\n<ul>\n<li>The first cloud application server on the <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>The first application server for computers <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/index.php\/videos\/youtube\/9c-g7UxT0nk\/\">Plug PC<\/a><\/noindex>.<\/li>\n<li>The first application server for <noindex><a rel=\"nofollow\" href=\"http:\/\/blog.arungupta.me\/wildfly-on-raspberry-pi-techtip-24\/\">Raspberry Pi<\/a><\/noindex>.<\/li>\n<li>A whole range of projects running on devices <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/iot\/android\/\">Android<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nFor many years, we have been tackling issues related to running Java applications in the cloud and on resource-constrained devices (think IoT) and have learned to squeeze the most out of JVM in terms of performance and memory optimization. Like many others, we have long been working with the native compilation of Java applications through <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> og endda <noindex><a rel=\"nofollow\" href=\"https:\/\/source.android.com\/devices\/tech\/dalvik\">Dalvik<\/a><\/noindex> og vi er fuldt ud klar over fordele og ulemper ved denne tilgang (for eksempel dilemmaet mellem alsidigheden i \"build once \u2013 run-anywhere\" og det faktum, at de kompilerede applikationer har en mindre st\u00f8rrelse og starter hurtigere).<\/p>\n<p>Hvorfor er det s\u00e5 vigtigt at tage disse fordele og ulemper i betragtning? Fordi forholdet mellem dem i nogle situationer bliver afg\u00f8rende:<\/p>\n<ul>\n<li>For eksempel i serverless\/ereventstyrende milj\u00f8er, hvor <noindex><a rel=\"nofollow\" href=\"https:\/\/mikhail.io\/2018\/08\/serverless-cold-start-war\/\">tjenester simpelthen er n\u00f8dt til at starte<\/a><\/noindex> i (h\u00e5rdt eller bl\u00f8dt) realtid for at kunne reagere p\u00e5 h\u00e6ndelser. I mods\u00e6tning til langtidsaktive vedholdende tjenester \u00f8ger varigheden af en kold start kritisk svartiden p\u00e5 anmodninger. Der g\u00e5r stadig v\u00e6sentlig tid til at starte JVM, og selvom det i nogle tilf\u00e6lde kan forkortes med rent hardwaremetoder, kan forskellen mellem et sekund og 5 millisekunder v\u00e6re et sp\u00f8rgsm\u00e5l om liv og d\u00f8d. Ja, her kan man eksperimentere med at oprette en varm reserve af Java-maskiner (som vi eksempelvis gjorde ved <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/projectodd\/kwsk\">porteringen af OpenWhisk til Knative<\/a><\/noindex>), men det garanterer ikke i sig selv et tilstr\u00e6kkeligt antal JVM'er til at h\u00e5ndtere anmodninger, mens lasten skaleres. Og \u00f8konomisk set er det n\u00e6ppe den mest hensigtsm\u00e6ssige l\u00f8sning.<\/li>\n<li>Derudover er der ogs\u00e5 det ofte fremh\u00e6vede aspekt som multitenancy. Selvom JVM'er med deres muligheder er kommet t\u00e6t p\u00e5 operativsystemerne, er de stadig ikke i stand til at g\u00f8re det, som vi er s\u00e5 vant til i Linux \u2013 at isolere processer. Derfor kan et nedbrud af en enkelt tr\u00e5d f\u00e5 hele Java-maskinen til at bryde sammen. Mange fors\u00f8ger at omg\u00e5 denne mangel ved at tildele en separat JVM til hver brugers applikation for at minimere konsekvenserne af nedbrud. Det er ganske logisk, men d\u00e5rligt foreneligt med skalering.<\/li>\n<li>Desuden er en vigtig m\u00e5ling for cloud-orienterede applikationer t\u00e6thed af tjenester p\u00e5 en v\u00e6rt. Overgangen til metodologien <noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12 faktorer for applikationer<\/a><\/noindex>, mikrotjenester og Kubernetes \u00f8ger antallet af Java-instanser pr. applikation. Det betyder, at p\u00e5 den ene side giver det fleksibilitet og p\u00e5lidelighed, men samtidig vokser ogs\u00e5 forbruget af grundl\u00e6ggende hukommelse pr. tjeneste, hvoraf en del af dette forbrug ikke altid er strengt n\u00f8dvendigt. Statisk kompilerede eksekverbare filer vinder her ved hj\u00e6lp af forskellige optimeringsteknikker, s\u00e5som lavniveau dead-code elimination, hvor kun de dele af rammerne (inklusive selve JDK), som tjenesten faktisk bruger, inkluderes i det endelige billede. Derfor hj\u00e6lper den native kompilering fra Quarkus med at placere instanser af tjenester t\u00e6ttere p\u00e5 v\u00e6rten uden at g\u00e5 p\u00e5 kompromis med sikkerheden.<\/li>\n<\/ul>\n<p>\nDe ovenst\u00e5ende argumenter er allerede tilstr\u00e6kkelige til at forst\u00e5 berettigelsen af native kompilering set fra Quarkus-projektets deltageres perspektiv. Men der er ogs\u00e5 en anden, ikke-teknisk, men stadig vigtig \u00e5rsag: I de seneste \u00e5r har mange programm\u00f8rer og udviklingsvirksomheder opgivet Java til fordel for nye programmeringssprog, idet de har betragtet Java sammen med sine JVM'er, stakke og rammer som for kr\u00e6vende i forhold til hukommelse, alt for langsom osv.<\/p>\n<p>Men vanen med at bruge det samme v\u00e6rkt\u00f8j til at l\u00f8se alle opgaver \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/java\/comments\/8xv3ha\/does_anybody_use_spring_boot_with_aws_lambda_do\/\">er ikke altid korrekt<\/a><\/noindex>. Nogle gange er det bedre at tage et skridt tilbage og finde noget andet. Og hvis Quarkus f\u00e5r folk til at tage en pause og t\u00e6nke over det, s\u00e5 er det godt for hele Java-\u00f8kosystemet. Quarkus repr\u00e6senterer en nyskabende tilgang til, hvordan man skaber mere effektive applikationer, hvilket g\u00f8r Java mere relevant for nye applikationsarkitekturer som serverless. Derudover, takket v\u00e6re sin udvidelsesmulighed, h\u00e5ber vi, at Quarkus vil f\u00e5 et helt Java-\u00f8kosystem af udvidelser, hvilket betydeligt vil \u00f8ge antallet af rammer, der fra starten vil st\u00f8tte native kompilering som en del af applikationerne.<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Native kompilering i Quarkus \u2013 hvorfor det er vigtigt | ProHoster","description":"Hej alle sammen!","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/76573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=76573"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/76573\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/76574"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=76573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=76573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=76573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}