矢量和垃圾收集器

Guy*_*Guy 0 java garbage-collection vector

我正在运行一个使用许多向量的java程序.我担心我使用它们会导致垃圾收集器无法正常工作.

我有很多线程可以:

vec.addAll(<collection>);
Run Code Online (Sandbox Code Playgroud)

和其他线程:

vec.remove(0);
Run Code Online (Sandbox Code Playgroud)

我有打印输出显示向量是空的,但我想知道内存是否实际被释放.

我需要担心吗?

Dan*_*den 5

如果Vector中的对象没有被引用(通过Vector或任何其他代码),那么它们将由垃圾收集器自行决定收集.垃圾收集器99.999%的时间不需要你的帮助.

但是,即使在垃圾收集器释放对象之后,它也可能无法将堆内存返回给操作系统,因此您的进程可能看起来占用的内存比应该多.

另外,我对Vector类的实现非常熟悉(正如其他人已经指出的那样,你应该真正使用它ArrayList),但是当你调用时.remove()我并不认为底层数组会向下调整大小.因此,如果您将数千个对象填充到Vector中然后将它们全部删除,则可能仍会分配几千个字节的空数组.在这种情况下的解决方案是打电话vector.trimToSize().