{"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\/nl\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","title":{"rendered":"Natuurlijke compilatie in Quarkus \u2013 waarom is dit belangrijk","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo allemaal! Dit is de tweede post in onze serie over Quarkus \u2013 vandaag bespreken we native compilatie.<\/p>\n<p><img decoding=\"async\" alt=\"Natuurlijke compilatie in Quarkus \u2013 waarom is dit belangrijk\" 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 is een Java-stack, ontworpen voor <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>. Hoewel er hier nog veel te doen is, hebben we verschillende aspecten goed uitgewerkt, waaronder de optimalisatie van de JVM en een scala aan frameworks. Een van de kenmerken van Quarkus die veel interesse wekt onder ontwikkelaars, is de uitgebreide, naadloze aanpak om Java-code om te zetten in uitvoerbare bestanden voor specifieke besturingssystemen (de zogenaamde 'native compilatie'), vergelijkbaar met C en C++, waar deze compilatie meestal aan het einde van de cyclus plaatsvindt, bestaande uit bouwen, testen en implementeren.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEn hoewel native compilatie, zoals we verderop zullen laten zien, belangrijk is, moet worden opgemerkt dat Quarkus ook zeer goed functioneert op een reguliere Java-machine met OpenJDK Hotspot dankzij de prestatieverbeteringen die we door de hele stack hebben gerealiseerd. Daarom moet native compilatie worden gezien als een extra bonus die naar wens of behoefte kan worden gebruikt. In feite steunt Quarkus, wat betreft native images, in hoge mate op OpenJDK. De door ontwikkelaars goed ontvangen dev mode biedt vrijwel onmiddellijke testmogelijkheden voor wijzigingen door middel van uitgebreide mogelijkheden voor dynamische code-uitvoering, gerealiseerd in Hotspot. Bovendien maakt GraalVM gebruik van de klassebibliotheek van OpenJDK en de mogelijkheden van HotSpot bij het cre\u00ebren van native images.<\/p>\n<p>Waarom is native compilatie dan nodig als alles al optimaal is geoptimaliseerd? Deze vraag proberen we hieronder te beantwoorden.<\/p>\n<p>Laten we beginnen met het voor de hand liggende: Red Hat heeft veel ervaring met het optimaliseren van de JVM, stacks en frameworks in de loop van de ontwikkeling van het project <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/\">JBoss<\/a><\/noindex>, inclusief:<\/p>\n<ul>\n<li>De eerste applicatieserver voor cloudgebruik op het platform <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>De eerste applicatieserver voor gebruik op desktops <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/index.php\/videos\/youtube\/9c-g7UxT0nk\/\">Plug PC<\/a><\/noindex>.<\/li>\n<li>De eerste applicatieserver voor gebruik op <noindex><a rel=\"nofollow\" href=\"http:\/\/blog.arungupta.me\/wildfly-on-raspberry-pi-techtip-24\/\">Raspberry Pi<\/a><\/noindex>.<\/li>\n<li>Een scala aan projecten die draaien op apparaten <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/iot\/android\/\">Android<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nWe hebben al vele jaren te maken gehad met het opstarten van Java-applicaties in de cloud en op apparaten met beperkte middelen (lees: IoT) en hebben geleerd om het maximale uit de JVM te halen qua prestaties en geheugenoptimalisatie. Net als veel anderen werken we al lange tijd met native compilatie van Java-applicaties via <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> en zelfs <noindex><a rel=\"nofollow\" href=\"https:\/\/source.android.com\/devices\/tech\/dalvik\">Dalvik<\/a><\/noindex> en we zijn ons bewust van de voor- en nadelen van deze aanpak (bijvoorbeeld de keuze tussen de veelzijdigheid van 'build once \u2013 run anywhere' en het feit dat gecompileerde applicaties een kleinere grootte hebben en sneller opstarten).<\/p>\n<p>Waarom is het zo belangrijk om deze voor- en nadelen in overweging te nemen? Omdat in sommige situaties de verhouding ertussen doorslaggevend wordt:<\/p>\n<ul>\n<li>Bijvoorbeeld in serverless\/gebeurtenisgestuurde omgevingen, waar <noindex><a rel=\"nofollow\" href=\"https:\/\/mikhail.io\/2018\/08\/serverless-cold-start-war\/\">diensten gewoon moeten worden gestart<\/a><\/noindex> in (harde of zachte) real-time modus om te kunnen reageren op gebeurtenissen. In tegenstelling tot langdurige persistente diensten, verhoogt hier de duur van een koude start kritiek de responstijd op een verzoek. Het opstarten van de JVM kost nog steeds aanzienlijke tijd en hoewel dit in sommige gevallen puur hardwarematig kan worden verkort, kan het verschil tussen \u00e9\u00e9n seconde en 5 milliseconden een kwestie van leven en dood zijn. Ja, hier kunnen we spelen met het cre\u00ebren van een warme reserve van Java-machines (wat we bijvoorbeeld deden bij <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/projectodd\/kwsk\">de portering van OpenWhisk naar Knative<\/a><\/noindex>), maar dit garandeert niet op zichzelf een voldoende aantal JVM's voor het verwerken van aanvragen naarmate de belasting toeneemt. En vanuit economisch oogpunt is dit zeker niet de beste oplossing.<\/li>\n<li>Daarna is er nog een veelbesproken aspect, zoals multi-tenanting. Ondanks dat JVM's qua mogelijkheden sterk zijn benaderd, zijn ze nog steeds niet in staat om te doen wat we zo gewend zijn in Linux \u2013 processen te isoleren. Daarom kan een uitval van \u00e9\u00e9n thread de hele Java-machine ontregelen. Velen proberen dit nadeel te omzeilen door voor elke gebruiker een aparte JVM voor applicaties toe te wijzen om de gevolgen van een storing te minimaliseren. Dit is heel logisch, maar past slecht bij schaalvergroting.<\/li>\n<li>Bovendien is voor cloud-geori\u00ebnteerde applicaties een indicator zoals de dichtheid van diensten op de host belangrijk. Overstappen op de methodologie <noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12 factors of application<\/a><\/noindex>, microservices en Kubernetes verhogen het aantal Java-instanties per applicatie. Dit betekent dat, aan de ene kant, dit alles elasticiteit en betrouwbaarheid biedt, maar tegelijkertijd ook de basisgeheugenkosten per service verhoogt, waarvan een deel niet altijd strikt noodzakelijk is. Statisch gecompileerde uitvoerbare bestanden winnen hier door verschillende optimalisatietechnieken, zoals low-level dead-code elimination, waarbij alleen die delen van de frameworks (inclusief de JDK zelf) in de eindafbeelding worden opgenomen die de service daadwerkelijk gebruikt. Daarom helpt native compilatie in Quarkus om instanties van services dichter op de host te plaatsen zonder in te boeten op veiligheid.<\/li>\n<\/ul>\n<p>\nDe bovenstaande argumenten zijn eigenlijk al voldoende om de rechtvaardiging van native compilatie vanuit het perspectief van de deelnemers aan het Quarkus-project te begrijpen. Er is echter nog een andere, niet-technische, maar ook belangrijke reden: de afgelopen jaren hebben veel programmeurs en ontwikkelingsbedrijven Java opgegeven ten gunste van nieuwe programmeertalen, omdat ze vonden dat Java met zijn JVM's, stacks en frameworks te veel geheugen verbruikt, te traag is, enzovoort.<\/p>\n<p>Maar de gewoonte om dezelfde tool te gebruiken voor elke taak - <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/java\/comments\/8xv3ha\/does_anybody_use_spring_boot_with_aws_lambda_do\/\">is niet altijd juist<\/a><\/noindex>. Soms is het beter om een stap terug te doen en iets anders te zoeken. En als Quarkus mensen dwingt om even stil te staan en na te denken, dan is dat goed voor het hele Java-ecosysteem. Quarkus belichaamt een innovatieve kijk op hoe je effici\u00ebntere applicaties kunt bouwen en maakt Java relevanter voor nieuwe applicatie-architecturen, zoals serverless. Bovendien, dankzij de uitbreidbaarheid, hopen we dat Quarkus zal worden ondersteund door een hele ecosysteem van Java-extensies, waardoor het aantal frameworks dat native compilatie in applicaties ondersteunt aanzienlijk zal toenemen.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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 compilatie in Quarkus \u2013 waarom het belangrijk is | ProHoster","description":"Hallo allemaal!","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/76573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=76573"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/76573\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/76574"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=76573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=76573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=76573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}