{"id":41519,"date":"2024-11-27T10:42:44","date_gmt":"2024-11-27T09:42:44","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=41519"},"modified":"2025-06-12T08:36:41","modified_gmt":"2025-06-12T06:36:41","slug":"compressed-oops","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/java\/compressed-oops\/","title":{"rendered":"Compressed Oops in Java"},"content":{"rendered":"\n<p>In diesem Artikel erf\u00e4hrst du wie durch \"Compressed Oops\" auf einem 64-Bit-System Referenzen auf Java-Objekte mit nur 32 statt 64 Bits dargestellt werden k\u00f6nnen und wie dadurch der Speicherbedarf einer Java-Anwendung signifikant reduziert wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"was-ist-ein-64-bit-system\">Was ist ein 64-Bit-System?<\/h2>\n\n\n\n<p>Ein 64-Bit-System zeichnet sich dadurch aus, dass Pointer auf Adressen im Arbeitsspeicher 64 Bit gro\u00df sind. Dadurch lassen sich 2<sup>64<\/sup> Bytes = 16 Exabyte = 18.446.744.073.709.551.616 Bytes adressieren.<\/p>\n\n\n\n<p>Heutzutage gibt es praktisch keine Programme mit diesem Speicherbedarf. In zehn Jahren werden wir \u00fcber diese Aussage vielleicht schmunzeln ;-)<\/p>\n\n\n\n<p>Hier die grafische Darstellung eines solchen 64-Bit-Pointers:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"126\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-800x126.png\" alt=\"64-Bit-Pointer\" class=\"wp-image-41545\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-800x126.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-224x35.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-336x53.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-504x79.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-672x106.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-400x63.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-600x95.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-944x149.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2-1200x189.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-64-bit-pointer.v2.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<p>Nun k\u00f6nnte man \u00fcberlegen, diese 64 Bit in der Mitte zu teilen und mit der gleichen Speichermenge nicht nur einen, sondern zwei Pointer zu speichern:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"126\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-800x126.png\" alt=\"Zwei 32-Bit-Pointer\" class=\"wp-image-41544\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-800x126.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-224x35.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-336x53.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-504x79.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-672x106.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-400x63.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-600x95.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-944x149.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers-1200x189.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-two-32-bit-pointers.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<p>Mit 32 Bit lassen sich allerdings nur 2<sup>32<\/sup> Bytes = 4 GB adressieren. Das wiederum ist f\u00fcr viele Anwendungen zu wenig.<\/p>\n\n\n\n<p>Die Java-Entwickler haben sich daher einen cleveren Trick (\u201eCompressed Oops\u201c) einfallen lassen, um mit 32 Bit nicht nur 4 GB sondern 32 GB zu adressieren. Und das wiederum ist f\u00fcr die meisten Anwendungen unserer Zeit ausreichend.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"wie-funktionieren-compressed-oops\">Wie funktionieren Compressed Oops?<\/h2>\n\n\n\n<p>Durch Compressed Oops (OOP steht f\u00fcr \u201eordinary object pointer\u201c) kann mit 32-Bit-Pointern ein Adressraum von 2<sup>35<\/sup> = 32 Gigabyte adressiert werden.<\/p>\n\n\n\n<p>Wie ist das m\u00f6glich? Um 32 Gigabyte zu adressieren, br\u00e4uchten wir doch eigentlich 35 Bits. 35 Bits k\u00f6nnen wir aber nicht in einem 32-Bit-int speichern, daf\u00fcr br\u00e4uchten wir die n\u00e4chstgr\u00f6\u00dfere Datenstruktur, ein 64-Bit-long:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"126\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-800x126.png\" alt=\"35-Bit-Pointer\" class=\"wp-image-41546\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-800x126.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-224x35.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-336x53.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-504x79.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-672x106.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-400x63.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-600x95.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-944x149.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer-1200x189.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-35-bit-pointer.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<p>Wir h\u00e4tten also 29 Bit verschwendet. Dann h\u00e4tten wir auch bei 64-Bit-Pointern bleiben k\u00f6nnen.<\/p>\n\n\n\n<p>Es wird Zeit einen Trick anzuwenden!<\/p>\n\n\n\n<p>Zun\u00e4chst einmal positionieren wir alle Java-Objekte an durch acht teilbare Speicheradressen. Acht ist 2<sup>3<\/sup>, d. h. die letzten 3 Bits eines Pointers sind immer 0. Somit enthalten also nur die oberen 32 Bit relevante Informationen:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"130\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-800x130.png\" alt=\"32 relevante Bits in einem 35-Bit-Pointer\" class=\"wp-image-41547\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-800x130.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-224x36.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-336x55.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-504x82.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-672x109.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-400x65.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-600x98.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-944x153.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6-1200x195.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-in-35-bit-pointer.v6.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<p>Da wir wissen, dass die letzten drei Bits immer 0 sind, brauchen wir diese nicht jedes Mal mit abzuspeichern. Die 35-Bit-Speicheradresse kann daher ohne Informationsverlust um 3 Bit nach rechts verschoben und somit in einem 32-Bit-Feld gespeichert werden:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"214\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-800x214.png\" alt=\"Compressed OOP in Java: auf 32 Bit komprimierter 35-Bit-Pointer\" class=\"wp-image-41548\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-800x214.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-224x60.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-336x90.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-504x135.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-672x180.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-400x107.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-600x161.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-944x253.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3-1200x321.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-32-bit-compressed-pointer-compressed-oop.v3.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<p>Um sp\u00e4ter wieder auf die unkomprimierte Speicheradresse zugreifen zu k\u00f6nnen, m\u00fcssen die 32 Bit lediglich wieder um 3 Bit nach links geschoben werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"compressed-oops-sind-standardmaessig-aktiviert\">Compressed Oops sind standardm\u00e4\u00dfig aktiviert<\/h2>\n\n\n\n<p>Auf einem 64-Bit-System mit maximal 32 GB Heap sind Compressed OOPs standardm\u00e4\u00dfig aktiviert. Bei mehr als 32 GB k\u00f6nnen Compressed Oops nicht verwendet werden, da sie eben nur 32 GB adressieren k\u00f6nnen.<\/p>\n\n\n\n<p>Compressed Oops k\u00f6nnen mit folgender VM-Option deaktiviert werden:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><code>-XX:-UseCompressedOops<\/code><\/p>\n\n\n\n<p>Warum sollte man das tun?<\/p>\n\n\n\n<p>Das Komprimieren und Dekomprimieren der Pointer kostet Zeit. Nicht viel, da die daf\u00fcr ben\u00f6tigte Shift-Operation in der Regel in einem einzigen CPU-Zyklus durchgef\u00fchrt werden kann. Doch wer das letzte Qu\u00e4nt\u00adchen Performance aus seiner Anwendung herauskitzeln will und den daf\u00fcr erh\u00f6hten Speicherbedarf in Kauf nehmen will (alle Pointer belegen 64 statt 32 Bits), der kann diese M\u00f6glichkeit in Betracht ziehen.<\/p>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-c18ba2f6 uagb-infobox__content-wrap  uagb-infobox-icon-left uagb-infobox-left uagb-infobox-stacked-mobile uagb-infobox-image-valign-top hc-infobox\"><div class=\"uagb-ifb-icon-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z\"><\/path><\/svg><\/div><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><\/div><p class=\"uagb-ifb-desc\">Bis Java 14 war die Aktivierung von <a href=\"https:\/\/www.happycoders.eu\/de\/java\/object-headers-compressed-class-pointers\/#compressed-class-pointers\">Compressed Class Pointers<\/a> an die Aktivierung von Compressed OOPs gekoppelt. Wenn man Compressed OOPs deaktivierte, wurden automatisch auch Compressed Class Pointers deaktiviert. Da es keinen Grund f\u00fcr diese Kopplung gab, wurde sie in <a href=\"https:\/\/www.happycoders.eu\/de\/java\/java-15-features\/#Keine_Kopplung_von_Compressed_Oops_und_Compressed_Class_Pointers\">Java 15<\/a> aufgehoben.<\/p><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"fazit\">Fazit<\/h2>\n\n\n\n<p>Mit Compressed Oops lassen sich auf einem 64-Bit-System mit einer Heapgr\u00f6\u00dfe von maximal 32 GB Speicheradressen mit nur 32 statt 64 Bits kodieren. Das es auf jedes aktive Java-Objekt in einer Anwendung mindestens einen Pointer gibt, kann somit der Speicherbedarf einer Anwendung signifikant reduziert werden.<\/p>\n<aside><p>Wenn dir der Artikel weitergeholfen hat, w\u00fcrde ich mich sehr \u00fcber eine positive Bewertung auf meinem <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">ProvenExpert-Profil<\/a> freuen. Dein Feedback hilft mir, meine Inhalte weiter zu verbessern und motiviert mich, neue informative Artikel zu schreiben.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">Bewertung abgeben<\/a><\/p>\r\n                        <p>Du m\u00f6chtest \u00fcber alle neue Java-Features auf dem Laufenden sein? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders-Newsletter anzumelden.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"#\" data-formkit-toggle=\"d8ee997126\">Newsletter-Anmeldung<\/a><\/p><\/aside>","protected":false},"excerpt":{"rendered":"<p>Wie k\u00f6nnen durch \"Compressed Oops\" Objekt-Referenzen auf einem 64-Bit-System mit nur 32 Bit dargestellt werden?<\/p>\n","protected":false},"author":1,"featured_media":41554,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"Wie k\u00f6nnen durch \"Compressed Oops\" Objekt-Referenzen auf einem 64-Bit-System mit nur 32 Bit dargestellt werden?","_seopress_robots_index":"","_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":3713,"_post_count":0,"footnotes":""},"categories":[64],"tags":[165],"class_list":["post-41519","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java-fortgeschritten"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2024\/11\/java-compressed-oops.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Wie k\u00f6nnen durch \"Compressed Oops\" Objekt-Referenzen auf einem 64-Bit-System mit nur 32 Bit dargestellt werden?","public_identification_id":"1707ebc7ef8f456ca2f899147d72740d","private_identification_id":"03cb04bd1f034c0699624dcad5633fff","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/41519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=41519"}],"version-history":[{"count":9,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/41519\/revisions"}],"predecessor-version":[{"id":52423,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/41519\/revisions\/52423"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/41554"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=41519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=41519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=41519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}