{"id":42,"date":"2018-05-22T19:15:19","date_gmt":"2018-05-22T17:15:19","guid":{"rendered":"https:\/\/www.rothamel.com\/?p=42"},"modified":"2018-05-30T07:31:37","modified_gmt":"2018-05-30T05:31:37","slug":"java-stack-vs-heap","status":"publish","type":"post","link":"https:\/\/www.rothamel.com\/index.php\/2018\/05\/22\/java-stack-vs-heap\/","title":{"rendered":"Java: Stack vs. Heap"},"content":{"rendered":"<p>Stack vs Heap<\/p>\n<p>1. Stack<br \/>\n1.1. Struktur<\/p>\n<p>Der Stack stellt einen Speicherbereich dar der in Form eines LIFO Puffers (Last In \u2013 Fist Out) organisiert ist. Elemente die zuerst auf dem Stack abgelegt werden liegen unten, die zuletzt abgelegten Elemente liegen oben. Durch die Struktur des Stacks und der hierdurch sehr effizienten Verwaltung, sind Stack-Operationen in der Regel sehr performant.<\/p>\n<p>1.2. Stack und Threads<\/p>\n<p>Jedem Thread wird f\u00fcr seinen Thread-Stack ein Speicherbereich mit initialer, fixer Gr\u00f6\u00dfe zugewiesen. Werden Daten auf den Stack gelegt, so w\u00e4chst dieser an und schrumpft wenn diese Elemente finalisiert werden. Meist variiert die Gr\u00f6\u00dfe des Stracks zwischen 64 KB und 8M. \u00dcber Parameter der Laufzeitumgebung kann (z. B. \u00fcber die Entwicklungsumgebung) die Strack-Gr\u00f6\u00dfe beeinflusst werden.<\/p>\n<p>2. Heap<br \/>\n2.1. Struktur<\/p>\n<p>Im Gegensatz zum Stack stellt der Heap einen intern aufwendiger zu verwaltenden und somit weniger effizient organisierten Speicherbereich dar, der allerdings auch deutlich weniger in seiner Gr\u00f6\u00dfe begrenzt ist. Er kann bis zur Speichergrenze auf Prozessebene anwachsen.<\/p>\n<p>2.2. Heap und Threads<\/p>\n<p>Der Zugriff auf den Heap erfolgt prim\u00e4r \u00fcber Zeiger. Dies ist nicht immer ersichtlich, so verwendet beispielsweise Java sog. Objektreferenzen um auf Objekte zuzugreifen die auf dem Heap liegen. Der Zugriff auf die Objekte des Heaps erfolgt global, d.h. der Sichtbarkeitsbereich der Objekte des Heap ist nicht beschr\u00e4nkt, es kann auf diese zugegriffen werden sobald ein Zeiger (oder eine Objektreferenz) vorhanden ist.<\/p>\n<p>3. Zusammenfassung<\/p>\n<p>Stack<\/p>\n<ul>\n<li>Begrenzte Gr\u00f6\u00dfe<\/li>\n<li>Schneller Zugriff (lesen, schreiben, l\u00f6schen)<\/li>\n<li>LIFO Struktur<\/li>\n<li>Nutzung f\u00fcr lokale Variablen und Methoden-Parameter<\/li>\n<\/ul>\n<p>Heap<\/p>\n<ul>\n<li>Beliebige Gr\u00f6\u00dfe (innerhalb der Prozessgrenze)<\/li>\n<li>Langsamer Zugriff (lesen, schreiben, l\u00f6schen)<\/li>\n<li>Objekte k\u00f6nnen global genutzt werden<\/li>\n<\/ul>\n<p>4. Anmerkungen<\/p>\n<ul>\n<li>In Sprachen ohne Garbage Collector muss der Speicher des Heap manuell freigegeben werden. Wird dieser Aufr\u00e4umprozess vergessen so kann schnell ein Memory Leak entstehen was letztendlich den Speicher des Systems \u00fcberlaufen l\u00e4sst.<\/li>\n<li>Die Entscheidung ob Elemente auf den Stack oder Heap kommen wird in Programmiersprachen wie z. B. Java automatisch getroffen und der Entwickler hat keinen Einfluss darauf.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Stack vs Heap 1. Stack 1.1. Struktur Der Stack stellt einen Speicherbereich dar der in Form eines LIFO Puffers (Last In \u2013 Fist Out) organisiert ist. Elemente die zuerst auf dem Stack abgelegt werden liegen unten, die zuletzt abgelegten Elemente liegen oben. Durch die Struktur des Stacks und der hierdurch sehr effizienten Verwaltung, sind Stack-Operationen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[7,8,6,9],"class_list":["post-42","post","type-post","status-publish","format-standard","hentry","category-java","tag-core","tag-heap","tag-java","tag-stack"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9W9h9-G","jetpack-related-posts":[{"id":55,"url":"https:\/\/www.rothamel.com\/index.php\/2018\/06\/23\/kleine-proxy-kunde-reverse-proxy-vs-forward-proxy\/","url_meta":{"origin":42,"position":0},"title":"Kleine Proxy-Kunde \u2013 Reverse Proxy vs. Forward Proxy","author":"Rolf Rothamel","date":"2018-06-23","format":false,"excerpt":"Im Alltag des Internets sind Begriffe wie Proxy, Forward-Proxy, Reverse-Proxy vielfach verwendet und oftmals gleichgesetzt. Doch sind Proxies immer Proxies? Sind sie alle gleich? Mit nichten. So unterscheiden sich Forward-Proxies deutlich von Revese-Proxies in ihrem Aufbau und Zweck. Der nachfolgende Artikel setzt sich mit den beiden Proxy-Typen auseinander und beschreibt\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/www.rothamel.com\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.rothamel.com\/wp-content\/uploads\/2018\/06\/prx2.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.rothamel.com\/wp-content\/uploads\/2018\/06\/prx2.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.rothamel.com\/wp-content\/uploads\/2018\/06\/prx2.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.rothamel.com\/wp-content\/uploads\/2018\/06\/prx2.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":324,"url":"https:\/\/www.rothamel.com\/index.php\/2022\/07\/06\/whatsapp-fotos-fuer-anfaenger\/","url_meta":{"origin":42,"position":1},"title":"WhatsApp Fotos f\u00fcr Anf\u00e4nger","author":"Rolf Rothamel","date":"2022-07-06","format":false,"excerpt":"Nachfolgender Beitrag richtet sich an absolute Smartphone Anf\u00e4nger, die gerade ihre ersten Schritte mit dem Smartphone absolvieren. Ziel ist es einen einfachen Weg zu zeigen, Fotos mit dem Smartphone zu erstellen und diese gleich via WhatsApp an einen Empf\u00e4nger (oder eine Gruppe) zu senden. Fokus liegt hier auf einen m\u00f6glichst\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/www.rothamel.com\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.rothamel.com\/wp-content\/uploads\/2022\/07\/grafik.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.rothamel.com\/wp-content\/uploads\/2022\/07\/grafik.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.rothamel.com\/wp-content\/uploads\/2022\/07\/grafik.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":132,"url":"https:\/\/www.rothamel.com\/index.php\/2019\/06\/07\/single-sign-on-und-die-sicherheit\/","url_meta":{"origin":42,"position":2},"title":"Single Sign-on und die Sicherheit","author":"Rolf Rothamel","date":"2019-06-07","format":false,"excerpt":"Single Sign-on (kurz SSO), das bedeutet, man muss sich nur einmal einloggen und bei verbundenen Diensten erfolgt eine automatische Authentifizierung. Das ist praktisch, aber nicht ungef\u00e4hrlich... https:\/\/entwickler.de\/online\/security\/single-sign-sicherheit-579892733.html","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/www.rothamel.com\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":398,"url":"https:\/\/www.rothamel.com\/index.php\/2023\/11\/23\/collections-and-streams\/","url_meta":{"origin":42,"position":3},"title":"Collections and streams","author":"Rolf Rothamel","date":"2023-11-23","format":false,"excerpt":"An interesting way to process a collection is the usage of streams. A stream provides a sequential access to the elements of the collection. Below a code snipped for a simple selection of elements of an existing collection. In this example the dataList contains just some Strings and we want\u2026","rel":"","context":"In &quot;Java&quot;","block_context":{"text":"Java","link":"https:\/\/www.rothamel.com\/index.php\/category\/java\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":219,"url":"https:\/\/www.rothamel.com\/index.php\/2020\/07\/15\/docker-teil-1-tomcat-im-docker-container\/","url_meta":{"origin":42,"position":4},"title":"Container &#8211; Part 1: Tomcat im Docker-Container","author":"Rolf Rothamel","date":"2020-07-15","format":false,"excerpt":"Docker represents a pleasant possibility to create clearly defined, lightweight runtime environments (containers) and to distribute them if necessary. In the following, the creation and possible use is shown using the example of a container with Tomcat and OpenSuse.","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/www.rothamel.com\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/posts\/42","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/comments?post=42"}],"version-history":[{"count":2,"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/posts\/42\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/posts\/42\/revisions\/44"}],"wp:attachment":[{"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/media?parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/categories?post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rothamel.com\/index.php\/wp-json\/wp\/v2\/tags?post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}