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)
我有打印输出显示向量是空的,但我想知道内存是否实际被释放.
我需要担心吗?
如果Vector中的对象没有被引用(通过Vector或任何其他代码),那么它们将由垃圾收集器自行决定收集.垃圾收集器99.999%的时间不需要你的帮助.
但是,即使在垃圾收集器释放对象之后,它也可能无法将堆内存返回给操作系统,因此您的进程可能看起来占用的内存比应该多.
另外,我对Vector类的实现非常熟悉(正如其他人已经指出的那样,你应该真正使用它ArrayList
),但是当你调用时.remove()
我并不认为底层数组会向下调整大小.因此,如果您将数千个对象填充到Vector中然后将它们全部删除,则可能仍会分配几千个字节的空数组.在这种情况下的解决方案是打电话vector.trimToSize()
.