Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组堆栈中的值是否应取消引用?_Java_Arrays_Stack - Fatal编程技术网

Java 数组堆栈中的值是否应取消引用?

Java 数组堆栈中的值是否应取消引用?,java,arrays,stack,Java,Arrays,Stack,假设我有一些使用数组存储值的堆栈实现。弹出时,是否可以简单地更改“指针”值所指的位置,还是应该将当前数组位置设置为null public T pop() { size--; return stack[size]; } 对 public T pop() { size--; T result = stack[size]; stack[size] = null; return result; } 如果未设置为null,堆栈仍将保留对以前在堆栈中的对象

假设我有一些使用数组存储值的堆栈实现。弹出时,是否可以简单地更改“指针”值所指的位置,还是应该将当前数组位置设置为null

public T pop() {
    size--;
    return stack[size];
}

public T pop() {
    size--;
    T result = stack[size];
    stack[size] = null;
    return result;
}

如果未设置为
null
,堆栈仍将保留对以前在堆栈中的对象的引用。它可能会导致内存泄漏,因为只要有东西持有对对象的引用,垃圾收集器就不会释放内存


因此,将
stack[size]
设置为
null

如果未设置为
null
,堆栈仍将保留对以前在堆栈中的对象的引用。它可能会导致内存泄漏,因为只要有东西持有对对象的引用,垃圾收集器就不会释放内存


因此,将
stack[size]
设置为
null

您可能应该将它们设置为null。垃圾收集是基于引用计数的,如果您将它们保留在堆栈上,但不可访问(这是您通过不设置null所建议的),则GC不知道它们已从堆栈中“弹出”


设置为null将允许GC执行其操作

您可能应该将它们设置为null。垃圾收集是基于引用计数的,如果您将它们保留在堆栈上,但不可访问(这是您通过不设置null所建议的),则GC不知道它们已从堆栈中“弹出”


设置为null将允许GC执行其操作

您应该设置为
null
。为什么?正常运行的数组堆栈是否会阻止用户访问弹出值而不将其设置为null?您的下一个
pop()
top()
将返回下面的元素,但您保留了对之前存在的对象的引用,因此无法对其进行垃圾收集。您应该将其设置为
null
。为什么?正常工作的数组堆栈是否会阻止用户访问弹出值而不将其设置为null?您的下一个
pop()
top()
将返回下面的元素,但是您保留了对之前存在的对象的引用,因此无法对其进行垃圾收集。那么,是否应该销毁程序中不再使用的任何数组?内存泄漏只能是数组的大小,并且假设我在弹出后按下一个值,则不再有泄漏。内存泄漏是您在内存中保留的内容的大小。如果在
堆栈[size]
中引用的对象是一个大对象,该对象本身可能引用其他对象,则这是一个大内存泄漏。当然,如果再次按下,它将删除该引用。但谁知道会不会有人推呢?在编写堆栈容器时,通常不能对如何使用它做出任何假设。当然,如果它只是一个玩具实现,那么它就不是很重要,但是如果你想学习如何正确地编写它,你就必须防止潜在的误用。那么,任何不再在程序中使用的数组也应该被销毁吗?内存泄漏只能是数组的大小,并且假设我在弹出后按下一个值,则不再有泄漏。内存泄漏是您在内存中保留的内容的大小。如果在
堆栈[size]
中引用的对象是一个大对象,该对象本身可能引用其他对象,则这是一个大内存泄漏。当然,如果再次按下,它将删除该引用。但谁知道会不会有人推呢?在编写堆栈容器时,通常不能对如何使用它做出任何假设。当然,如果它只是一个玩具实现,那么它就不是很重要,但是如果你想学习如何正确地编写它,你必须防止潜在的误用。