<div dir="ltr"><p class="">Hi, folks. I’m confused with the concrete
locations of the data structure and its inner objects in the heap. The questions
are below.</p>
<p class=""><span lang="EN-US">A general question: </span></p>
<p class=""><span lang="EN-US">If an object X is decided to be copied into
old from new gen by GC, all the objects which can be reached from X are copied into old too.
Or X’s retained set. Or this statement is wrong.</span></p><p class=""><span lang="EN-US"><br></span></p>
<p class=""><span lang="EN-US">Two concrete questions.</span></p>
<p class=""><span lang="EN-US">Q1: Can an array such as byte[], String[]
and Object[] span two generations?</span></p>
<p class=""><span lang="EN-US">I think primitive arrays such as byte[] and
int[] cannot span (e.g., a part of the array exists in eden and the other part exists
in old space). For reference arrays such as Object[], the array itself cannot
span but the items in the arrays can span (i.e., some items exist in new gen
while others exist in old gen). I’m not sure if I’m right and if String[] is as
same as byte[].</span></p>
<p class=""><span lang="EN-US"> </span></p>
<p class=""><span lang="EN-US">Q2: Can ArrayList, LinkedList, HashMap span
two generations?</span></p>
<p class=""><span lang="EN-US">For example, I initialize some data structures
as follows. </span></p><p class=""><span lang="EN-US">--------------------------------------------------------------------------------------------------</span></p><p class="" align="left"><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">import</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> java.util.ArrayList;</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">import</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> java.util.HashMap;</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">import</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> java.util.LinkedList;</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">import</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> java.util.List;</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">import</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> java.util.Map;</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New'"> </span></p><p class="" align="left"><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">public</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">class</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> ObjectTest {</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">public</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">static</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">void</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> main(String[] args) {</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> List<Obj> arrayList = </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">new</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> ArrayList<Obj>();</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> List<Obj> linkedList = </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">new</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> LinkedList<Obj>();</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> Map<String, Obj> hashMap = </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">new</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> HashMap<String, Obj>();</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">for</span></b><span lang="EN-US" style="font-family:'Courier New';color:black">(</span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">int</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> i = 0; i < 10000; i++) {</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj arrayObj = </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">new</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj();</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> arrayList.add(arrayObj);</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left">
<span lang="EN-US" style="font-family:'Courier New';color:black"> }</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">for</span></b><span lang="EN-US" style="font-family:'Courier New';color:black">(</span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">int</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> i = 0; i < 10000; i++) {</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj linkedObj = </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">new</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj();</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> linkedList.add(linkedObj);</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left">
<span lang="EN-US" style="font-family:'Courier New';color:black"> }</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">for</span></b><span lang="EN-US" style="font-family:'Courier New';color:black">(</span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">int</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> i = 0; i < 10000; i++) {</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> String str = i + </span><span lang="EN-US" style="font-family:'Courier New';color:rgb(42,0,255)">""</span><span lang="EN-US" style="font-family:'Courier New';color:black">;</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj hashObj = </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">new</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj();</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> hashMap.put(str, hashObj);</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left">
<span lang="EN-US" style="font-family:'Courier New';color:black"> }</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> }</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black">}</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left"><span lang="EN-US" style="font-family:'Courier New'"> </span></p>
<p class="" align="left"><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">class</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj {</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">byte</span></b><span lang="EN-US" style="font-family:'Courier New';color:black">[] </span><span lang="EN-US" style="font-family:'Courier New';color:rgb(0,0,192)">bytes</span><span lang="EN-US" style="font-family:'Courier New';color:black">;</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">public</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> Obj() {</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><span lang="EN-US" style="font-family:'Courier New';color:rgb(0,0,192)">bytes</span><span lang="EN-US" style="font-family:'Courier New';color:black"> = </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">new</span></b><span lang="EN-US" style="font-family:'Courier New';color:black"> </span><b><span lang="EN-US" style="font-family:'Courier New';color:rgb(127,0,85)">byte</span></b><span lang="EN-US" style="font-family:'Courier New';color:black">[16];</span><span lang="EN-US" style="font-family:'Courier New'"></span></p>
<p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"> }</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class=""><span lang="EN-US">
</span></p><p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black">}</span><span lang="EN-US" style="font-family:'Courier New'"></span></p><p class="" align="left"><span lang="EN-US" style="font-family:'Courier New';color:black"><span style="color:rgb(34,34,34);font-family:arial">--------------------------------------------------------------------------------------------------</span><br>
</span></p>
<p class=""><span lang="EN-US"></span><span lang="EN-US"></span></p>
<p class=""><span lang="EN-US">If new gen cannot hold all the objects, GC
will occur. I want to know if all the items in the data structure are copied
into old gen. </span></p>
<p class=""><span lang="EN-US">For example, arrayList itself exists in old
while some of its arrayObjs exist in new gen. A arrayObj exists in old gen
while its bytes exists in new gen.</span></p>
<p class=""><span lang="EN-US"> </span></p></div>