通过创建一个新数组并确保没有内存泄漏来扩展java数组

通过创建一个新数组并确保没有内存泄漏来扩展java数组,java,arrays,memory-leaks,null,new-operator,Java,Arrays,Memory Leaks,Null,New Operator,假设我从Joshua Bloch的有效Java中获得了以下堆栈类: 我的问题是关于ensureCapacity方法和Arrays.copyOf JDK方法的:既然copyOf似乎正在创建一个新的数组对象,我们如何确定旧的elements数组对象可以被垃圾收集 换句话说,如果每次调用ensureCapacity时都创建了一个新对象,那么旧对象会去哪里,并且不会有内存泄漏的风险?数组中的元素会复制到此行中的新数组中: elements = Arrays.copyOf(elements, 2 * si

假设我从Joshua Bloch的有效Java中获得了以下堆栈类:

我的问题是关于ensureCapacity方法和Arrays.copyOf JDK方法的:既然copyOf似乎正在创建一个新的数组对象,我们如何确定旧的elements数组对象可以被垃圾收集


换句话说,如果每次调用ensureCapacity时都创建了一个新对象,那么旧对象会去哪里,并且不会有内存泄漏的风险?

数组中的元素会复制到此行中的新数组中:

elements = Arrays.copyOf(elements, 2 * size + 1);

对于旧元素数组,它最终会被垃圾回收,因为没有更多指向它的引用。

数组中元素的旧对象会被复制到此行中的新数组中:

elements = Arrays.copyOf(elements, 2 * size + 1);

至于旧元素数组,它最终会被垃圾回收,因为没有更多的引用指向它。

垃圾回收拯救!您丢失了对前面的对象元素的引用。无论如何,JLS都无法避免java中的传统内存泄漏。给定的JVM可能不会完全遵循JLS。Java内存泄漏是指在需要内存很长时间后仍保留对内存的引用。垃圾收集可以拯救它!您丢失了对前面的对象元素的引用。无论如何,JLS都无法避免java中的传统内存泄漏。给定的JVM可能不会完全遵循JLS。Java内存泄漏是指在需要内存很长时间后仍保留对内存的引用。