<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>devkuma – Garbage Collection</title>
    <link>https://www.devkuma.com/en/tags/garbage-collection/</link>
    <image>
      <url>https://www.devkuma.com/en/tags/garbage-collection/logo/180x180.jpg</url>
      <title>Garbage Collection</title>
      <link>https://www.devkuma.com/en/tags/garbage-collection/</link>
    </image>
    <description>Recent content in Garbage Collection on devkuma</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>kc@example.com (kc kim)</managingEditor>
    <webMaster>kc@example.com (kc kim)</webMaster>
    <copyright>The devkuma</copyright>
    
	  <atom:link href="https://www.devkuma.com/en/tags/garbage-collection/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>JVM Garbage Collection</title>
      <link>https://www.devkuma.com/en/docs/jvm/garbage-collection/</link>
      <pubDate>Thu, 20 Jan 2022 07:48:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/en/docs/jvm/garbage-collection/</guid>
      <description>
        
        
        &lt;h2 id=&#34;what-is-garbage-collection&#34;&gt;What Is Garbage Collection?&lt;/h2&gt;
&lt;p&gt;Garbage collection (GC) is a JVM task that automatically releases memory no longer used by a Java process.&lt;/p&gt;
&lt;p&gt;Objects stored in the heap area at Java runtime continue to accumulate if they are not cleaned up, which can cause an &lt;code&gt;OutOfMemoryError&lt;/code&gt; (OOME). To prevent this, the JVM periodically collects and cleans up unused objects through GC.&lt;/p&gt;
&lt;p&gt;In languages such as C, memory must be allocated and released manually with functions such as &lt;code&gt;malloc()&lt;/code&gt; and &lt;code&gt;free()&lt;/code&gt;. Java removes this inconvenience by using GC technology to release memory automatically, freeing developers from manual memory management.&lt;/p&gt;
&lt;p&gt;Java code does not explicitly specify and release memory. Some developers set objects to &lt;code&gt;null&lt;/code&gt; or call the &lt;code&gt;System.gc()&lt;/code&gt; method. Setting an object to &lt;code&gt;null&lt;/code&gt; is not a major problem, but calling &lt;code&gt;System.gc()&lt;/code&gt; can have a very large impact on system performance, so the &lt;code&gt;System.gc()&lt;/code&gt; method should never be used.&lt;/p&gt;
&lt;p&gt;To understand JVM GC, you first need to understand the JVM memory structure. For the &lt;a href=&#34;https://www.devkuma.com/docs/java/jvm/&#34;&gt;JVM memory structure&lt;/a&gt;, refer to this page.&lt;/p&gt;
&lt;h2 id=&#34;unnecessary-memory-areas&#34;&gt;Unnecessary Memory Areas&lt;/h2&gt;
&lt;p&gt;If an application is built without considering memory usage, unused garbage data is created.&lt;/p&gt;
&lt;p&gt;For example, suppose there is a class like the following.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;right&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;l&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;l&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;right&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;setLeft&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;l&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;l&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;setRight&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;right&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create &lt;code&gt;TreeNode&lt;/code&gt; objects with the following processing.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;13&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;right&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;19&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;root&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;right&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;17&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this state, the root node references the left node and the right node.&lt;br&gt;
&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_treeNode_1.png&#34; alt=&#34;TreeNode&#34;&gt;&lt;/p&gt;
&lt;p&gt;Now suppose processing is added to replace the right node.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;root&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;setRight&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TreeNode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;21&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;));&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then the node with value 19 that was originally in the right node is no longer referenced by anything, resulting in the state shown below.&lt;br&gt;
&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_treeNode_2.png&#34; alt=&#34;TreeNode&#34;&gt;&lt;/p&gt;
&lt;p&gt;In this state, the &lt;code&gt;TreeNode&lt;/code&gt; instance with &lt;code&gt;data=19&lt;/code&gt; is an object that is not referenced from anywhere. In other words, it becomes an unreachable object and therefore garbage.&lt;/p&gt;
&lt;p&gt;If unused data continues to be created, unnecessary memory accumulates and eventually reaches the capacity limit. To prevent this in advance, GC (garbage collection), a mechanism that automatically releases unnecessary memory in the heap area, became necessary.&lt;/p&gt;
&lt;h2 id=&#34;gc-and-the-role-of-the-heap-area&#34;&gt;GC and the Role of the Heap Area&lt;/h2&gt;
&lt;p&gt;As mentioned earlier, GC is a mechanism that releases memory that is no longer needed.&lt;br&gt;
It examines data in memory. If there is a reference, the data remains as valid data; if there is no reference, it is judged unnecessary and released. However, checking all memory space in a simple way is inefficient, so memory is internally divided and managed according to how long data exists.&lt;/p&gt;
&lt;p&gt;Newer data is called &lt;strong&gt;Young Generation&lt;/strong&gt;, older data is called &lt;strong&gt;Old Generation&lt;/strong&gt;, and data judged in advance to be difficult to change is called &lt;strong&gt;Permanent Generation&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_heap.png&#34; alt=&#34;Heap Memory&#34;&gt;&lt;/p&gt;
&lt;p&gt;Basically, memory allocation occurs frequently, but most data is assumed to become unreferenced, so it is divided into short-lived data (Young Generation) and long-lived data (Old Generation).
This allows GC to efficiently check only the data included in the Young Generation.&lt;/p&gt;
&lt;p&gt;There is also an area called Permanent Generation, which stores data that is more or less guaranteed not to change, such as information about loaded classes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Permanent Generation memory area disappeared with Java 8, and the Metaspace area was introduced. For details about the Metaspace area, refer to &lt;a href=&#34;https://www.devkuma.com/docs/jvm/heap-memory/#java-8-hotspot-jvm/&#34;&gt;this page&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Reference: &lt;a href=&#34;http://openjdk.java.net/groups/hotspot/docs/StorageManagement.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenJDK documentation&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;gc-cycle&#34;&gt;GC Cycle&lt;/h2&gt;
&lt;p&gt;The heap area used by an application is broadly divided by GC execution area into the Young area (Eden, Survivor1, Survivor2) and the Old (Tenured) area.&lt;/p&gt;
&lt;p&gt;The Young area of the heap is divided into Eden and Survivor as shown below, and GC is performed by using each area appropriately.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_heap_1.png&#34; alt=&#34;heap memory&#34;&gt;&lt;/p&gt;
&lt;p&gt;Each area has the following role.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eden
&lt;ul&gt;
&lt;li&gt;The memory area allocated immediately after a Java object is created.&lt;/li&gt;
&lt;li&gt;Objects that survive regular garbage collection move to Survivor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Survivor1, Survivor2
&lt;ul&gt;
&lt;li&gt;Data that is not released after GC and does not go to Old. There are two areas for convenience, simply named 1 and 2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tenured
&lt;ul&gt;
&lt;li&gt;Data that survives a specified number of GCs is moved to Old.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GC is divided into Minor GC and Major GC (Full GC) depending on the area where GC is performed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GC in the Young area is called &lt;strong&gt;Minor GC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;GC in the Old area is called &lt;strong&gt;Full GC&lt;/strong&gt; (or Major GC).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When Full GC occurs, stop-the-world happens, momentarily stopping the Java application. Because it is relatively slow, it can have a major impact on performance and stability.&lt;/p&gt;
&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;&lt;div class=&#34;h4 alert-heading&#34; role=&#34;heading&#34;&gt;STW(Stop the world)&lt;/div&gt;


What is stop the world? It means that, in order for GC to find and remove objects that are no longer needed, all threads except the thread running GC are stopped. When stop-the-world occurs, every thread except the GC thread stops its work. After the GC work completes, processing starts again. Because the application stops while STW occurs, it can lead to failures.  
In most cases, GC tuning means reducing stop-the-world time.
&lt;/div&gt;

&lt;h3 id=&#34;minor-gc&#34;&gt;Minor GC&lt;/h3&gt;
&lt;p&gt;GC that targets only the Young Generation is called Minor GC. It has the following characteristics.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Processing time is short.&lt;/li&gt;
&lt;li&gt;It occurs when Eden becomes full.&lt;/li&gt;
&lt;li&gt;If an object becomes a GC target a certain number of times, it moves to Old.&lt;/li&gt;
&lt;li&gt;During GC, process execution stops (Stop the world).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since diagrams are easier than text for this topic, it will be explained with diagrams.&lt;/p&gt;
&lt;p&gt;When newly allocated memory fills the Eden area, Minor GC occurs.&lt;br&gt;
Data without references is deleted, but valid data is copied to the Survivor area. The Eden area then becomes empty.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_minor_gc_1.png&#34; alt=&#34;Minor GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then, if the Eden area becomes full again in this state, another Minor GC occurs and the result is as shown below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_minor_gc_2.png&#34; alt=&#34;Minor GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;This time, after GC, all surviving data entered the Survivor2 area. Survivor data is copied to whichever Survivor area is empty, moving back and forth between 1 and 2. Therefore, one of Survivor1 and Survivor2 is always kept empty.&lt;br&gt;
Also, as with the Eden area, data in the Survivor area that is no longer referenced is deleted.&lt;/p&gt;
&lt;p&gt;Next is promotion to the Old area. Each time GC occurs, the count is recorded for data in the Young area, and when it exceeds a certain number, it moves to Old.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_minor_gc_3.png&#34; alt=&#34;Minor GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;As GC is repeated several times like this, movement from the Young area to the Old area occurs. This count can be specified with an option, and the frequency of moving to the Old area can be controlled with the option below.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-XX:MaxTenuringThreshold=N
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;full-gc&#34;&gt;Full GC&lt;/h3&gt;
&lt;p&gt;We have now seen the structure where data moves from the Young area to the Old area. If this were all, the capacity of the Old area would always increase and eventually reach its limit. At that point, Full GC occurs. Full GC occurs when allocation to the Old area fails, and it cleans memory including both the Old area and the Young area.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_full_gc_1.png&#34; alt=&#34;Full GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;This secures space that is no longer needed in the Old area and makes it possible to copy data from the Survivor area.&lt;/p&gt;
&lt;p&gt;As with Minor GC, the application stops during Full GC. Because the pause time becomes longer in proportion to the amount of data in the Old area, it is important to release memory as much as possible in the Young area and minimize Full GC occurrences.&lt;/p&gt;
&lt;h3 id=&#34;gc-cycle-summary&#34;&gt;GC Cycle Summary&lt;/h3&gt;
&lt;p&gt;The GC cycle can be summarized as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When the Eden area becomes full, Minor GC occurs.&lt;/li&gt;
&lt;li&gt;Minor GC releases the Young area, and objects are promoted to Old if they satisfy the conditions.&lt;/li&gt;
&lt;li&gt;When the Old area becomes full, Full GC occurs.&lt;/li&gt;
&lt;li&gt;Full GC releases the Old area and secures space for promotion.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;automatic-garbage-collection&#34;&gt;Automatic Garbage Collection&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s look at the garbage collection process.&lt;/p&gt;
&lt;p&gt;Automatic Garbage Collection is the process of identifying which objects in heap memory are in use and which are not, then removing unused objects. An object in use or referenced means that some part of the program still maintains a pointer to that object.&lt;/p&gt;
&lt;p&gt;In programming languages such as C, memory must be manually allocated or released, but in Java, memory is automatically released by the Garbage Collector. Let&amp;rsquo;s look at the basic process of Automatic GC.&lt;/p&gt;
&lt;h3 id=&#34;step-1-marking&#34;&gt;Step 1: Marking&lt;/h3&gt;
&lt;p&gt;Marking is the process of identifying memory in pieces.&lt;/p&gt;
&lt;p&gt;The garbage collector checks referenced objects (reachable/live objects) in memory and marks which objects are unreferenced (unreachable objects).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_gc_step1.png&#34; alt=&#34;Step 1: Marking&#34;&gt;&lt;/p&gt;
&lt;p&gt;Referenced objects are shown in blue, and the rest are shown in orange. Every object is scanned during the marking process to make this decision. This process is time-consuming because every object in the system must be scanned.&lt;/p&gt;
&lt;h3 id=&#34;step-2-normal-deletion&#34;&gt;Step 2: Normal Deletion&lt;/h3&gt;
&lt;p&gt;Normal Deletion is the process of deleting unreferenced objects.&lt;/p&gt;
&lt;p&gt;The garbage collector deletes unreferenced objects (unreachable objects).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_gc_step2.png&#34; alt=&#34;Step 2: Normal Deletion&#34;&gt;&lt;/p&gt;
&lt;p&gt;After deleting unreferenced objects, it leaves pointers to referenced objects and free space. The memory allocator keeps references to free space for newly allocated objects.&lt;/p&gt;
&lt;h3 id=&#34;step-2a-deletion-with-compacting&#34;&gt;Step 2a: Deletion with Compacting&lt;/h3&gt;
&lt;p&gt;To improve deletion performance, this process deletes unreferenced objects and also compacts the remaining spaces.&lt;/p&gt;
&lt;p&gt;Some garbage collectors delete unreferenced objects (unreachable objects) while also performing compaction to use memory more effectively.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_gc_step3.png&#34; alt=&#34;Step 2a: Deletion with Compacting&#34;&gt;&lt;/p&gt;
&lt;p&gt;By gathering objects in one place, new memory allocation becomes easier and faster. The Memory Allocator only needs to keep the start address of free space. New objects are then allocated sequentially.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&#34;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Oracle official documentation: Java Garbage Collection Basics&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;gc-algorithms&#34;&gt;GC Algorithms&lt;/h2&gt;
&lt;p&gt;There are several GC algorithms. The four representative ones are as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Serial GC&lt;/li&gt;
&lt;li&gt;Parallel GC&lt;/li&gt;
&lt;li&gt;CMS (Concurrent Mark &amp;amp; Sweep) GC&lt;/li&gt;
&lt;li&gt;Garbage First GC (G1GC)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GC algorithms are classified by considering throughput and responsiveness.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application-stop type
&lt;ul&gt;
&lt;li&gt;Serial GC, Parallel GC&lt;/li&gt;
&lt;li&gt;Default GC for single-core and multi-core environments&lt;/li&gt;
&lt;li&gt;Focuses on throughput, but because the time stopped by GC can become long, it may not satisfy response time requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Concurrent processing type in parallel with the application
&lt;ul&gt;
&lt;li&gt;CMS, G1GC&lt;/li&gt;
&lt;li&gt;Chosen in multi-core environments when Parallel GC cannot satisfy response time requirements&lt;/li&gt;
&lt;li&gt;Throughput may decrease.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is a method of dividing GC into two stages and suppressing maximum application pauses.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A stage where GC runs concurrently with the application&lt;/li&gt;
&lt;li&gt;A stage where the application stops and GC runs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;serial-gc&#34;&gt;Serial GC&lt;/h3&gt;
&lt;p&gt;As the word &amp;ldquo;Serial&amp;rdquo; suggests, Serial GC is a sequential GC method.&lt;br&gt;
It was the default garbage collector in Java SE 5 and 6, and it mainly runs as a single thread on 32-bit JVMs.&lt;br&gt;
Mark-sweep and compaction are executed with a single thread.&lt;br&gt;
It was used in single-core environments.&lt;/p&gt;
&lt;p&gt;As shown in the image below, because the GC thread performs GC as a single thread, execution time is long.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_gc_1_serial.png&#34; alt=&#34;Serial GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;In other words, while the GC thread is running, the Stop-the-World (Pause) duration is long.&lt;/p&gt;
&lt;p&gt;The Serial GC-related option is as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-XX:+UseSerialGC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;&lt;div class=&#34;h4 alert-heading&#34; role=&#34;heading&#34;&gt;Mark-Sweep-Compaction&lt;/div&gt;


Mark-Sweep-Compaction is an algorithm used by various different GCs. It can be thought of as the basic GC process.

Because GC removes unused objects from memory, it identifies GC target objects, removes them, and fills fragmented memory areas from the front.

- Identifying unused objects (Mark)
- Removing unused objects (Sweep)
- Filling fragmented memory areas from the front (Compaction)

The Compaction step can be understood by thinking of disk defragmentation in Windows.
&lt;/div&gt;

&lt;h3 id=&#34;parallel-gc&#34;&gt;Parallel GC&lt;/h3&gt;
&lt;p&gt;Parallel GC works on the same principle as Serial GC, but differs in that the Young area GC process is performed with multiple threads.&lt;br&gt;
Therefore, GC thread execution time is relatively shorter than Serial GC, and Stop-the-World (Pause) occurs for a shorter time.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_gc_2_parallel.png&#34; alt=&#34;Parallel GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;It works quickly by specifying the number of threads and using multiple threads at the same time to perform GC.&lt;br&gt;
It is the default in multi-core environments and performs mark-sweep and compaction with multiple threads.&lt;/p&gt;
&lt;p&gt;There are Low-pause and Throughput methods.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Low-pause: Focuses on minimizing the momentary pause of application execution rather than executing GC quickly.&lt;/li&gt;
&lt;li&gt;Throughput: Focuses on quickly executing Minor GC, and uses only the Mark &amp;amp; Compact algorithm for Full GC.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Parallel GC-related options are as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-XX:+UseParallelGC&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This CLI option enables a multi-threaded young generation collector and a single-threaded old generation collector.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-XX:ParallelGCThreads=&amp;lt;desired number&amp;gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;By default, on a host with N CPUs, parallel GC uses N GC threads. The number of threads can be controlled with the CLI.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;parallel-old-gcparallel-compacting-gc&#34;&gt;Parallel Old GC(Parallel Compacting GC)&lt;/h4&gt;
&lt;p&gt;Parallel Old GC is a GC method provided since Java 5 update 6. Compared with the Parallel GC described above, only the GC algorithm for the Old area is different. This method goes through Mark-Summary-Compaction.&lt;br&gt;
The Summary step differs from the Sweep step of the Mark-Sweep-Compaction algorithm in that it separately identifies live objects in the area where GC was previously performed, and it goes through a slightly more complex process.&lt;/p&gt;
&lt;p&gt;The Parallel Old GC-related option is as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-XX:+UseParallelOldGC&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This CLI option enables a multi-threaded collector in both the young generation and old generation. In addition, the compacting collector also runs with multiple threads.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;cms-concurrent-mark--sweep-gc&#34;&gt;CMS (Concurrent Mark &amp;amp; Sweep) GC&lt;/h3&gt;
&lt;p&gt;CMS GC aims to minimize application stops (stop-the-world) caused by GC by performing GC work concurrently with application threads.
Because it does not perform compaction, it uses more memory.&lt;/p&gt;
&lt;p&gt;Because CPU resources are used for cooperation between threads and related processing, application throughput is expected to decrease, but the overall application stop time becomes shorter. As a result, GC has less impact on response time.&lt;/p&gt;
&lt;p&gt;If CPU usage is high, performance may degrade; in that case, Parallel GC is used.&lt;br&gt;
Its disadvantages are high CPU resource usage and possible memory fragmentation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_gc_3_cms.png&#34; alt=&#34;CMS GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;In the Initial Mark stage, objects in a referenced state are marked in a short time. Then, without stopping everything, the Concurrent Mark stage checks referenced objects.&lt;br&gt;
In the Remark stage, changed or newly added objects are checked. In the Concurrent Sweep stage, unreferenced objects are cleaned up.&lt;/p&gt;
&lt;p&gt;The CMS GC-related option is as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-XX:+UseConcMarkSweepGC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;g1garbage-first-gc&#34;&gt;G1(Garbage First) GC&lt;/h3&gt;
&lt;p&gt;G1 GC was created to replace CMS. It is not divided into the existing Young and Old areas; instead, it manages the heap by dividing it into small areas called &amp;ldquo;regions&amp;rdquo;. It copies objects from one or more regions and moves them to other regions. Unlike CMS, it removes memory fragmentation through the Compaction step. It was officially added in Java 7.&lt;/p&gt;
&lt;p&gt;It is intended to use effective GC on multiple CPUs and very large memory. According to Oracle documentation, when the heap size is larger than 6GB, GC latency can be reduced below &lt;code&gt;0.5sec&lt;/code&gt;. According to Oracle G1 GC documentation, Java 9 uses it as the default GC. (Previously, Parallel GC was the default.)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/java/jvm/java_jvm_gc_4_g1.png&#34; alt=&#34;G1 GC&#34;&gt;&lt;/p&gt;
&lt;p&gt;G1 GC is named Garbage First because it first collects regions that contain only garbage.&lt;/p&gt;
&lt;p&gt;The G1 GC-related option is as follows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-XX:+UseG1GC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;history-of-gc&#34;&gt;History of GC&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Before Java 6
&lt;ul&gt;
&lt;li&gt;Serial GC, Parallel GC, CMS GC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Java 8
&lt;ul&gt;
&lt;li&gt;Serial GC and Parallel GC are the defaults.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Java 7
&lt;ul&gt;
&lt;li&gt;G1 GC was added.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Java 9
&lt;ul&gt;
&lt;li&gt;G1 GC is the default.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://openjdk.java.net/groups/hotspot/docs/StorageManagement.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenJDK documentation&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://qiita.com/e_tyubo/items/48398391a8ef0f24c1be&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;整理 Java GC の仕組み&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://d2.naver.com/helloworld/1329&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Java Garbage Collection&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.programmersought.com/article/4905216600/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Garbage Collection Algorithm and JVM Memory Management&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mirinae312.github.io/develop/2018/06/04/jvm_gc.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;How does Java GC work?&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://d2.naver.com/helloworld/1329&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Java Garbage Collection&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://imp51.tistory.com/entry/G1-GC-Garbage-First-Garbage-Collector-Tuning&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;JVM tuning&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Getting Started with the G1 Garbage Collector&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Java Garbage Collection Basics&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>Java</category>
      
      <category>JVM</category>
      
      <category>Garbage collection</category>
      
    </item>
    
  </channel>
</rss>
