java中关于arraylist的内存分配及回收问题

时间:2022-06-23 22:06:13
list=new ArrayList();    //第1次new   
list.add('A');
list.add('B');

list=new ArrayList();   //第2次new   
   
list.add('C');
list.add('D');

想请问一下第1次new ArrayList()时的对象和内存会是怎样的?  能不能被回收啊?     

8 个解决方案

#1


该回复于2015-05-26 13:21:16被管理员删除

#2


可以,假设为计数引用的GC
生成list对象,
生成string对象A
将list对象中array引到符号表A上
。。
。。
 当释放list时list引用记数为0,回收
 A,,为0回收

#3


第一次创建的list包含有'A'、'B'两个元素啊,这个list没有被清空啊, 它的内存能够被回收吗?

#4


能的。因为第一次的list和“A”和“B”都没有其他引用了。

#5


如果是这样, 没有没有清空的list和它包含的对象能被回收的话, 那list的 clear() 方法没什么特别意义了吧. 

#6


 
list=new ArrayList();    //第1次new  
list.add('A'); 
list.add('B'); 

list=new ArrayList();  //第2次new   

第一次被清空,是因为你第2次又new了ArrayList
其实你如果为了减少内存分配,可以这样
list=new ArrayList();    //第1次new  
list.add('A'); 
list.add('B'); 

list.clear() ;
  
list.add('C'); 
list.add('D'); 

#7


用clear()方法的时候list的对象句柄的栈地址是不会变的
list=new ArrayList();  //第2次new  
list的对象句柄的栈地址是变的

#8


这样两次new ArrayList(),是不是会开辟两块地址空间呢? 我想确认的是如果第一次的list对象包含有未清除的元

素,gc能把这个list和里面的元素全部回收掉吗? 我感觉是这个list和"A"以及"B"有包含或者引用关系啊.

     

#1


该回复于2015-05-26 13:21:16被管理员删除

#2


可以,假设为计数引用的GC
生成list对象,
生成string对象A
将list对象中array引到符号表A上
。。
。。
 当释放list时list引用记数为0,回收
 A,,为0回收

#3


第一次创建的list包含有'A'、'B'两个元素啊,这个list没有被清空啊, 它的内存能够被回收吗?

#4


能的。因为第一次的list和“A”和“B”都没有其他引用了。

#5


如果是这样, 没有没有清空的list和它包含的对象能被回收的话, 那list的 clear() 方法没什么特别意义了吧. 

#6


 
list=new ArrayList();    //第1次new  
list.add('A'); 
list.add('B'); 

list=new ArrayList();  //第2次new   

第一次被清空,是因为你第2次又new了ArrayList
其实你如果为了减少内存分配,可以这样
list=new ArrayList();    //第1次new  
list.add('A'); 
list.add('B'); 

list.clear() ;
  
list.add('C'); 
list.add('D'); 

#7


用clear()方法的时候list的对象句柄的栈地址是不会变的
list=new ArrayList();  //第2次new  
list的对象句柄的栈地址是变的

#8


这样两次new ArrayList(),是不是会开辟两块地址空间呢? 我想确认的是如果第一次的list对象包含有未清除的元

素,gc能把这个list和里面的元素全部回收掉吗? 我感觉是这个list和"A"以及"B"有包含或者引用关系啊.