{"id":20962,"date":"2014-09-04T11:04:01","date_gmt":"2014-09-04T10:04:01","guid":{"rendered":"https:\/\/www.inovex.de\/\/?p=51"},"modified":"2014-09-04T11:04:01","modified_gmt":"2014-09-04T10:04:01","slug":"art-in-practice","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/","title":{"rendered":"ART in Practice"},"content":{"rendered":"<p>This is the third part of our series about significant changes inside the latest Android version 4.4. If you have checked out part 1 and part 2 from Matthias about the new ART runtime, you might want to play with it a bit. We\u2019ll cover some of the implications in this article.<!--more--><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#Make-the-switch\" >Make the switch<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#Developing-on-ART\" >Developing on ART<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#Heap-dumps\" >Heap dumps<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#Garbage-collection\" >Garbage collection<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#Stability\" >Stability<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#Summary\" >Summary<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Make-the-switch\"><\/span>Make the switch<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Switching to ART looks easy and tempting at a first glance, but there are some implications you should know about upfront. The most straight forward way is to use a device which runs the latest Android Version with ART enabled. According to Google the following devices have ART enabled in the stock\u00a0ROM:<\/p>\n<ul>\n<li>Nexus 7 (2013)<\/li>\n<li>Nexus 4<\/li>\n<li>Nexus 5<\/li>\n<\/ul>\n<p>Noticeably missing are the Nexus 7 (2012) and Nexus 10. And unfortunately the ART option is not available by default on those devices. However you can try to build a custom AOSP ROM for those devices with ART enabled. Just make sure to include the following lines in your device-config:<\/p>\n<pre class=\"lang:sh decode:true \">PRODUCT_RUNTIMES := runtime_libdvm_default\n\nPRODUCT_RUNTIMES += runtime_libart<\/pre>\n<p>This means that you have the classic dalvik selected as default and included the ART runtime as an option into the build.<\/p>\n<p>In case you have no supported Hardware, you could try the emulator. You\u2019ll be out of luck if you just try the default 4.4 AVD and switch to ART, it will result in an endless boot-loop. This is a known issue, but a fix is already on its way. In the meantime you can search the web for already patched emulator images (at your own risk of course).<\/p>\n<p>In case you have passed the obstacles and switched to ART, you will first notice a significantly longer bootup-time. As Matthias mentioned in his first posts, this step needs to be done in order to convert all apps and the Framework (!) to OAT files which will run on ART.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Developing-on-ART\"><\/span>Developing on ART<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>I had the chance to run some tests on 2 Nexus 7 (2013) devices in parallel, one running dalvik, the other \u2013 of course \u2013 on ART. Both devices are on Android 4.4.2.<\/p>\n<p>So in case you don\u2019t care much about all the details: Is there any difference for you as a developer? In a nutshell: Not really. If you haven\u2019t dealt with details of the dalvik VM in the past you will barely notice the difference.<\/p>\n<p>Of course you connect your ART enabled device via ADB. Nothing has changed here. When you deploy your shiny application, let\u2019s say via eclipse, it will all work as expected. Of course the logfiles look a bit different, most noticeable some error messages during install and startup phase:<\/p>\n<pre class=\"lang:sh decode:true \">E\/art ( 2471): Unrecognized option -XX:mainThreadStackSize=24K\n\nW\/art ( 2471): Ignoring unknown -Xgc option: precise<\/pre>\n<p>And the already known conversion which takes place instead of the dexopt-step when running on Dalvik:<\/p>\n<pre class=\"lang:sh decode:true \" title=\"Dalvik\">I\/PackageManager( 580): Running dexopt on: de.inovex.samples I\/PackageManager( 580): Package de.inovex.samples codePath changed from \/data\/app\/de.inovex.samples-2.apk to \/data\/app\/de.inovex.samples-1.apk; Retaining data and using new D\/dalvikvm(26369): DexOpt: load 58ms, verify+opt 221ms, 1243292 bytes<\/pre>\n<pre class=\"lang:sh decode:true \" title=\"ART\">I\/PackageManager( 609): Running dexopt on: de.inovex.samples\n\nI\/PackageManager( 609): Package de.inovex.samples codePath changed from \/data\/app\/de.inovex.samples-2.apk to \/data\/app\/de.inovex.samples-1.apk; Retaining data and using new\n\nI\/dex2oat ( 2508): dex2oat: \/data\/dalvik-cache\/data@app@de.inovex.samples-1.apk@classes.dex<\/pre>\n<p>Fortunately most of the developing tools also work as expected. I haven\u2019t noticed any significant difference using tools like Traceview or Allocation tracker. Also the debugger works nearly 100% as with dalvik, meaning that ART has implemented the JDWP Spec. This suspicion can be confirmed by checking the <span class=\"lang:sh decode:true crayon-inline \">runtime\/jdwp\/README.txt<\/span> file in the AOSP ART directory which states that ART has an incomplete but working JDWP implementation.<\/p>\n<p>One thing you might notice when inspecting objects is that every object has an additional field called <span class=\"lang:sh decode:true crayon-inline \">shadow$_klass_<\/span> Now what is that? Going through the sources you\u2019ll find that ART has a different implementation of <span class=\"lang:java decode:true crayon-inline \">java.lang.Object<\/span> compared to dalvik, you can find them here inside the AOSP Source tree:<\/p>\n<pre class=\"lang:sh decode:true \">\/libcore\/libart\/src\/main\/java\/java\/lang\/Object.java\n\n\/libcore\/libdvm\/src\/main\/java\/java\/lang\/Object.java<\/pre>\n<p>The ART implementation contains this additional field holding the class name of the created object.<\/p>\n<p>I couldn\u2019t figure out why this is needed in detail, feel free to dig deeper into ART and find the reasons for it.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Heap-dumps\"><\/span>Heap dumps<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>ART does support heap dumps via the <span class=\"lang:sh decode:true crayon-inline \">hprof<\/span> file format, which means you can analyze a heap snapshot with tools like <span class=\"lang:sh decode:true crayon-inline \">jhat<\/span> or <span class=\"lang:sh decode:true crayon-inline \">MAT<\/span> in Eclipse. The results are similar to dalvik dumps but there are a some additional objects specific to ART. As you can see in the screenshot it seems like ART needs wrapper or proxy objects for method calling (my guess is into the framework) and these objects are visible in your heap and do count to your memory consumption as far as I can tell. But whether this will stay with future versions of ART or is just the result of the current implementation status I don\u2019t know.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Garbage-collection\"><\/span>Garbage collection<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>One thing that you&#8217;ll quickly notice is the new garbage collector. It initially shows up with its new log-entries, for example:<\/p>\n<pre class=\"lang:sh decode:true \">I\/art ( 5258): GcCauseExplicit concurrent mark sweep GC freed 16(800B) AllocSpace objects, 1(16KB) LOS objects, 0% free, 27MB\/28MB, paused 5.035ms total 39.367ms<\/pre>\n<p>Compared to the classic Dalvik:<\/p>\n<pre class=\"lang:sh decode:true \">D\/dalvikvm(24541): GC_EXPLICIT freed 43K, 66% free 29942K\/87404K, paused 9ms+11ms, total 98ms<\/pre>\n<p>You\u2019ll get similar information in a slightly different format including the cause, the collector who did the job, heap stats and the pause time.<\/p>\n<p>You\u2019ll notice significantly fewer log-lines regarding the garbage collection. This seems to have 2 root causes:<\/p>\n<ul>\n<li>Not every GC is logged<\/li>\n<li>The GC-behaviour is different<\/li>\n<\/ul>\n<p>In order to analyze the new GC, I run a test App which I used to demonstrate GC-pauses. It runs a loop to animate a Rectangle using a custom View and creates objects inside the <span class=\"lang:java decode:true crayon-inline \">onDraw<\/span> method (which you shouldn\u2019t do, and this shows why). Since the <span class=\"lang:java decode:true crayon-inline \">onDraw<\/span> method is called 60 times per second, the app creates a lot of objects and keeps the garbage collector busy. When the GC runs, you\u2019ll usually notice a short frame-drop of the animation. You can visualize those hickups by using the developer tools and profile the GPU activity as shown in the screenshots below. Every time a line crosses the green Bar, you have missed a frame.<\/p>\n<p>When running the same App on dalvik compared to ART, you\u2019ll notice that dalvik prints out more GC-messages than ART. It seems that ART is less aggressive running the GC, which leads to fewer hickups. On the downside, the longer you wait, the more objects you have to scan &amp; clean. But the pause times are more or less the same between ART and dalvik. You can see the results by comparing the 2 screenshots, the dalvik device produced 2 hickups within a short timeframe while the ART runtime only shows one. For completeness&#8216; sake: The other delay you see is caused by the screenshot process.<\/p>\n<p>Running the GC less often is probably a good thing, as long as pause times don\u2019t get longer. It increases the chance that your animation or transition will not be disrupted by a GC run. So ART seems to run the GC less frequently. But that is not the whole truth. It also prints out less GC messages. When you dig into the sources, there is a place where ART decides whether the collection was \u201cslow\u201c. Check <span class=\"lang:sh decode:true crayon-inline \">runtime\/gc\/heap.cc<\/span> for details. If it was a slow gc-run, it will collect statistics and log them. The threshold for being slow is defined in <span class=\"lang:sh decode:true crayon-inline \">runtime\/gc\/head.h<\/span> and it&#8217;s currently set to 5ms pause time or 100ms gc-run-time. Faster GC runs will not be logged.<\/p>\n<p>From a first view, the GC situation seems to get better than with dalvik. In my limited tests the GC runs less often with similar or fewer pause times compared to dalvik. The decision not to log every GC run (even if there was a short pause) is a bit strange, though.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Stability\"><\/span>Stability<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In general use ART seems quite stable. But using the development tools like allocation tracker will increase the chance to crash it. I sometimes managed to get a device reboot while playing with the tools. But that\u2019s okay for now, as ART is still experimental.<\/p>\n<p>You might also encounter issues with installed apps from the Play Store. The most popular example is WhatsApp which crashes using ART. There is a really good <a href=\"https:\/\/plus.google.com\/+IanRogersManchester\/posts\/Lp2Gknm5cDm\" target=\"_blank\" rel=\"noopener\">description of this particular case<\/a> by Ian Rogers.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>So what about speed? Everyone is talking about the performance improvements of ART. I skipped the part intentionally. As Matthias pointed out in earlier Posts, ART is running in a very defensive mode. It\u2019s beta. And performance measurements are hard to get right anyhow. I have already said too much about the GC-performance which might not be accurate. I\u2019ll leave this field to others.<\/p>\n<p>From a developer\u2019s perspective it\u2019s good to see that Google cares about our tools. We\u2019ll most likely not loose anything, and there are already more ATRACE-Tags inside ART compared to dalvik which we get back in systrace. A probably better GC will help decrease UI-glitches and therefore I\u2019m looking forward to get an even better ART as default runtime. And not to miss this one: I haven\u2019t touched renderscript and JNI with my tests so far.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is the third part of our series about significant changes inside the latest Android version 4.4. If you have checked out part 1 and part 2 from Matthias about the new ART runtime, you might want to play with it a bit. We\u2019ll cover some of the implications in this article.<\/p>\n","protected":false},"author":14,"featured_media":12059,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[510],"service":[],"coauthors":[{"id":14,"display_name":"Matthias Schaff","user_nicename":"mschaff"}],"class_list":["post-20962","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-apps-2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ART in Practice - inovex GmbH<\/title>\n<meta name=\"description\" content=\"Switching to the new Android runtime ART looks easy and tempting at a first glance, but there are some implications you should know about upfront.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ART in Practice - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"Switching to the new Android runtime ART looks easy and tempting at a first glance, but there are some implications you should know about upfront.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2014-09-04T10:04:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2300\" \/>\n\t<meta property=\"og:image:height\" content=\"678\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthias Schaff\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded-1024x302.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthias Schaff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Matthias Schaff\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/\"},\"author\":{\"name\":\"Matthias Schaff\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/293e47490d25b6c8a0739950e0f4fc0a\"},\"headline\":\"ART in Practice\",\"datePublished\":\"2014-09-04T10:04:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/\"},\"wordCount\":1425,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"keywords\":[\"Apps\"],\"articleSection\":[\"Applications\",\"English Content\",\"General\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/\",\"name\":\"ART in Practice - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"datePublished\":\"2014-09-04T10:04:01+00:00\",\"description\":\"Switching to the new Android runtime ART looks easy and tempting at a first glance, but there are some implications you should know about upfront.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/artikelbild-core-embedded.jpg\",\"width\":2300,\"height\":678,\"caption\":\"Core Embedded\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/art-in-practice\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ART in Practice\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/293e47490d25b6c8a0739950e0f4fc0a\",\"name\":\"Matthias Schaff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g2f6063a3750e31ea610a1ababa629940\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g\",\"caption\":\"Matthias Schaff\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/mschaff\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ART in Practice - inovex GmbH","description":"Switching to the new Android runtime ART looks easy and tempting at a first glance, but there are some implications you should know about upfront.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/","og_locale":"de_DE","og_type":"article","og_title":"ART in Practice - inovex GmbH","og_description":"Switching to the new Android runtime ART looks easy and tempting at a first glance, but there are some implications you should know about upfront.","og_url":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2014-09-04T10:04:01+00:00","og_image":[{"width":2300,"height":678,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","type":"image\/jpeg"}],"author":"Matthias Schaff","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded-1024x302.jpg","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Matthias Schaff","Gesch\u00e4tzte Lesezeit":"8\u00a0Minuten","Written by":"Matthias Schaff"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/"},"author":{"name":"Matthias Schaff","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/293e47490d25b6c8a0739950e0f4fc0a"},"headline":"ART in Practice","datePublished":"2014-09-04T10:04:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/"},"wordCount":1425,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","keywords":["Apps"],"articleSection":["Applications","English Content","General"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/","url":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/","name":"ART in Practice - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","datePublished":"2014-09-04T10:04:01+00:00","description":"Switching to the new Android runtime ART looks easy and tempting at a first glance, but there are some implications you should know about upfront.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/artikelbild-core-embedded.jpg","width":2300,"height":678,"caption":"Core Embedded"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/art-in-practice\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"ART in Practice"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/293e47490d25b6c8a0739950e0f4fc0a","name":"Matthias Schaff","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g2f6063a3750e31ea610a1ababa629940","url":"https:\/\/secure.gravatar.com\/avatar\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a9fe671894ef3b7da1da326ef522ce664c3f8a61b70cb875f93cc8e2ed806069?s=96&d=retro&r=g","caption":"Matthias Schaff"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/mschaff\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/20962","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=20962"}],"version-history":[{"count":0,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/20962\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/12059"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=20962"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=20962"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=20962"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=20962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}