{"id":442,"date":"2024-06-12T20:16:15","date_gmt":"2024-06-12T19:16:15","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=442"},"modified":"2024-06-30T20:18:23","modified_gmt":"2024-06-30T19:18:23","slug":"die-verschiedenen-typen-von-referenzen-in-java","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=442","title":{"rendered":"Die verschiedenen Typen von Referenzen in Java"},"content":{"rendered":"\n<p>Java ist eine objektorientierte Programmiersprache, die haupts\u00e4chlich f\u00fcr ihre Einfachheit, Portabilit\u00e4t und Robustheit bekannt ist. Ein wichtiger Aspekt bei der Arbeit mit Java ist das Verst\u00e4ndnis von Referenzen. In Java werden Objekte im Speicher verwaltet, und Referenzen spielen eine zentrale Rolle bei der Verwaltung des Speicherplatzes, insbesondere bei der Speicherbereinigung (Garbage Collection). Es gibt verschiedene Typen von Referenzen in Java, die alle spezifische Anwendungsf\u00e4lle und Eigenschaften haben. Diese Referenzen sind: starke Referenzen, schwache Referenzen, weiche Referenzen und Phantomreferenzen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Starke Referenzen (Strong References)<\/h3>\n\n\n\n<p>Die am h\u00e4ufigsten verwendete Art von Referenz in Java ist die starke Referenz. Wenn wir ein Objekt erstellen und es einer Variablen zuweisen, wird eine starke Referenz erstellt. Ein Objekt, das durch eine starke Referenz referenziert wird, wird nicht vom Garbage Collector entfernt, solange die Referenz besteht.<\/p>\n\n\n\n<p>Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">String<\/span> s = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">String<\/span>(<span class=\"hljs-string\">\"Hallo Welt!\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel ist <code>s<\/code> eine starke Referenz auf das <code>String<\/code>-Objekt &#8222;Hallo Welt!&#8220;. Solange <code>s<\/code> auf dieses Objekt verweist, wird es nicht vom Garbage Collector entfernt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schwache Referenzen (Weak References)<\/h3>\n\n\n\n<p>Schwache Referenzen erlauben es, dass ein Objekt vom Garbage Collector gesammelt wird, auch wenn eine schwache Referenz auf das Objekt existiert. Schwache Referenzen sind n\u00fctzlich, wenn wir sicherstellen wollen, dass ein Objekt gesammelt werden kann, sobald es keine starken Referenzen mehr darauf gibt.<\/p>\n\n\n\n<p>Schwache Referenzen werden mit der Klasse <code>java.lang.ref.WeakReference<\/code> implementiert.<\/p>\n\n\n\n<p>Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.lang.ref.WeakReference;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">WeakReferenceExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> str = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">String<\/span>(<span class=\"hljs-string\">\"Hallo Welt!\"<\/span>);\n        WeakReference&lt;<span class=\"hljs-built_in\">String<\/span>&gt; weakReference = <span class=\"hljs-keyword\">new<\/span> WeakReference&lt;&gt;(str);\n\n        <span class=\"hljs-comment\">\/\/ Entfernt die starke Referenz<\/span>\n        str = <span class=\"hljs-literal\">null<\/span>;\n\n        <span class=\"hljs-comment\">\/\/ Kann jetzt vom Garbage Collector gesammelt werden<\/span>\n        System.gc();\n\n        <span class=\"hljs-keyword\">if<\/span> (weakReference.get() == <span class=\"hljs-literal\">null<\/span>) {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt wurde gesammelt\"<\/span>);\n        } <span class=\"hljs-keyword\">else<\/span> {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt ist noch verf\u00fcgbar\"<\/span>);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird das <code>String<\/code>-Objekt &#8222;Hallo Welt!&#8220; durch eine schwache Referenz referenziert. Nachdem die starke Referenz <code>str<\/code> auf <code>null<\/code> gesetzt wurde, kann das Objekt vom Garbage Collector gesammelt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Weiche Referenzen (Soft References)<\/h3>\n\n\n\n<p>Weiche Referenzen sind \u00e4hnlich wie schwache Referenzen, aber sie haben eine h\u00f6here Priorit\u00e4t beim Behalten im Speicher. Der Garbage Collector entfernt Objekte, die nur durch weiche Referenzen referenziert werden, nur dann, wenn der Speicher knapp wird. Weiche Referenzen sind n\u00fctzlich f\u00fcr Implementierungen von Caches, bei denen man Objekte behalten m\u00f6chte, solange ausreichend Speicher vorhanden ist.<\/p>\n\n\n\n<p>Weiche Referenzen werden mit der Klasse <code>java.lang.ref.SoftReference<\/code> implementiert.<\/p>\n\n\n\n<p>Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.lang.ref.SoftReference;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SoftReferenceExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> str = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">String<\/span>(<span class=\"hljs-string\">\"Hallo Welt!\"<\/span>);\n        SoftReference&lt;<span class=\"hljs-built_in\">String<\/span>&gt; softReference = <span class=\"hljs-keyword\">new<\/span> SoftReference&lt;&gt;(str);\n\n        <span class=\"hljs-comment\">\/\/ Entfernt die starke Referenz<\/span>\n        str = <span class=\"hljs-literal\">null<\/span>;\n\n        <span class=\"hljs-comment\">\/\/ Man kann das Objekt weiterhin \u00fcber die weiche Referenz erreichen<\/span>\n        <span class=\"hljs-keyword\">if<\/span> (softReference.get() != <span class=\"hljs-literal\">null<\/span>) {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt ist noch verf\u00fcgbar\"<\/span>);\n        } <span class=\"hljs-keyword\">else<\/span> {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt wurde gesammelt\"<\/span>);\n        }\n\n        <span class=\"hljs-comment\">\/\/ Fordert den Garbage Collector auf, den Speicher zu bereinigen<\/span>\n        System.gc();\n\n        <span class=\"hljs-keyword\">if<\/span> (softReference.get() == <span class=\"hljs-literal\">null<\/span>) {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt wurde jetzt gesammelt\"<\/span>);\n        } <span class=\"hljs-keyword\">else<\/span> {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt ist immer noch verf\u00fcgbar\"<\/span>);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird das <code>String<\/code>-Objekt &#8222;Hallo Welt!&#8220; durch eine weiche Referenz referenziert. Das Objekt bleibt verf\u00fcgbar, bis der Speicher knapp wird und der Garbage Collector entscheidet, es zu sammeln.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Phantomreferenzen (Phantom References)<\/h3>\n\n\n\n<p>Phantomreferenzen sind die schw\u00e4chste Art von Referenzen in Java. Ein Objekt, das durch eine Phantomreferenz referenziert wird, ist f\u00fcr den Garbage Collector erreichbar, aber nicht direkt zug\u00e4nglich. Phantomreferenzen werden haupts\u00e4chlich verwendet, um eine Benachrichtigung zu erhalten, wenn ein Objekt aus dem Speicher entfernt wurde. Sie sind n\u00fctzlich f\u00fcr Aufgaben wie das S\u00e4ubern von Ressourcen, die ein Objekt au\u00dferhalb des Java-Heaps belegt hat.<\/p>\n\n\n\n<p>Phantomreferenzen werden mit der Klasse <code>java.lang.ref.PhantomReference<\/code> und <code>java.lang.ref.ReferenceQueue<\/code> implementiert.<\/p>\n\n\n\n<p>Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.lang.ref.PhantomReference;\n<span class=\"hljs-keyword\">import<\/span> java.lang.ref.ReferenceQueue;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">PhantomReferenceExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        ReferenceQueue&lt;<span class=\"hljs-built_in\">String<\/span>&gt; referenceQueue = <span class=\"hljs-keyword\">new<\/span> ReferenceQueue&lt;&gt;();\n        <span class=\"hljs-built_in\">String<\/span> str = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">String<\/span>(<span class=\"hljs-string\">\"Hallo Welt!\"<\/span>);\n        PhantomReference&lt;<span class=\"hljs-built_in\">String<\/span>&gt; phantomReference = <span class=\"hljs-keyword\">new<\/span> PhantomReference&lt;&gt;(str, referenceQueue);\n\n        <span class=\"hljs-comment\">\/\/ Entfernt die starke Referenz<\/span>\n        str = <span class=\"hljs-literal\">null<\/span>;\n\n        <span class=\"hljs-comment\">\/\/ Fordert den Garbage Collector auf, den Speicher zu bereinigen<\/span>\n        System.gc();\n\n        <span class=\"hljs-keyword\">if<\/span> (phantomReference.isEnqueued()) {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt wurde gesammelt und die Phantomreferenz ist in der Warteschlange\"<\/span>);\n        } <span class=\"hljs-keyword\">else<\/span> {\n            System.out.println(<span class=\"hljs-string\">\"Das Objekt ist noch verf\u00fcgbar\"<\/span>);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird das <code>String<\/code>-Objekt &#8222;Hallo Welt!&#8220; durch eine Phantomreferenz referenziert. Sobald das Objekt vom Garbage Collector gesammelt wird, wird die Phantomreferenz in die <code>ReferenceQueue<\/code> eingef\u00fcgt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p>Java bietet verschiedene Typen von Referenzen, die jeweils spezifische Zwecke und Anwendungsf\u00e4lle haben. Starke Referenzen sind die gebr\u00e4uchlichsten und verhindern, dass Objekte vom Garbage Collector entfernt werden. Schwache und weiche Referenzen erm\u00f6glichen es, Objekte zu behalten, ohne ihre Sammlung zu verhindern, wobei weiche Referenzen nur gesammelt werden, wenn der Speicher knapp ist. Phantomreferenzen bieten eine M\u00f6glichkeit, Benachrichtigungen zu erhalten, wenn ein Objekt aus dem Speicher entfernt wurde, und sind n\u00fctzlich f\u00fcr spezielle Anwendungsf\u00e4lle wie die Ressourcenbereinigung.<\/p>\n\n\n\n<p>Das Verst\u00e4ndnis dieser verschiedenen Referenztypen und ihrer Anwendung ist entscheidend f\u00fcr die effektive Speicherverwaltung und die Vermeidung von Speicherlecks in Java-Anwendungen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java ist eine objektorientierte Programmiersprache, die haupts\u00e4chlich f\u00fcr ihre Einfachheit, Portabilit\u00e4t und Robustheit bekannt ist. Ein wichtiger Aspekt bei der Arbeit mit Java ist das Verst\u00e4ndnis von Referenzen. In Java werden Objekte im Speicher verwaltet, und Referenzen spielen eine zentrale Rolle bei der Verwaltung des Speicherplatzes, insbesondere bei der Speicherbereinigung (Garbage Collection). Es gibt verschiedene [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-442","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=442"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/442\/revisions"}],"predecessor-version":[{"id":443,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/442\/revisions\/443"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}