use*_*819 7 java memory stack garbage-collection
我有一些Stack的pop方法的代码,我试图找出它如何避免游荡,同时仍然返回我们的索引当前指向的元素:
public String pop()
{ // Remove item from top of stack.
String item = a[--N];
a[N] = null; // Avoid loitering (see text).
if (N > 0 && N == a.length/4) resize(a.length/2);
return item;
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我们将String对象的引用项指向我们的数组a的索引元素(我们从最后一个元素开始,使用它的当前大小N-1,因此减少).然后,如果我们返回引用,为什么我们在这样做之前设置我们的引用指向null的索引元素?是不是这个项目指向什么都没有,什么也没有返回?
ass*_*ias 16
只要可以访问对象,就不能对其进行垃圾回收.如果您只是更改索引--N但不a[N]使用null,则将保留对该对象的引用,即使客户端代码不再引用该对象,也会阻止其进行垃圾回收.
这是您需要在Java中使变量无效的唯一情况之一.
您似乎也误解了引用的内容.a[N]包含一个指向内存中对象的值.写入时String item = a[N],将该值复制到变量中item.两个变量(item和a[N])现在都引用同一个对象.然后在编写时a[N] = null,从数组中删除该引用,但item仍包含指向原始对象的值.
| 归档时间: |
|
| 查看次数: |
5726 次 |
| 最近记录: |