我需要知道何时finalize()调用该方法JVM.我创建了一个测试类,当finalize()通过覆盖它来调用方法时,该测试类会写入文件.它没有被执行.谁能告诉我它没有执行的原因?
清除ArrayList的两个选项中哪一个更好更快,为什么?
list.clear()
Run Code Online (Sandbox Code Playgroud)
要么
list = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
碰巧我必须在随机的时间清除我的ArrayList中的所有条目,我无法知道将来会有多少新条目,可能有0或1000.哪种方法更快更好,为什么?
清空集合(在我的情况下是一个ArrayList)与创建一个新集合(并让垃圾收集器清除旧集合)的优点和缺点是什么.
具体来说,我有一个ArrayList<Rectangle>叫list.当某种情况发生时,我需要清空list并用其他内容重新填充.我是应该打电话list.clear()还是只是制作一个新的ArrayList<Rectangle>并让旧的垃圾收集?每种方法的优缺点是什么?
使用Java(1.6)是否最好在List上调用clear()方法或者只是重新实例化引用?
我有一个ArrayList,其中填充了未知数量的对象并定期"刷新" - 处理对象并清除列表.刷新后,List再次填满.冲洗是在随机时间发生的.列表中的数字可能很小(对象的10个)或大的(数百万个对象).
那么"flush"调用clear()或new ArrayList()会更好吗?
是否值得担心这类问题,还是我应该让VM担心呢?我怎样才能看看Java的内存占用为我自己做这类事情?
任何帮助非常感谢.
如果我没弄错的话,ArrayList包含存储位置的值,在这些位置中存储了你添加到List中的变量.所以,我的假设是,当你调用ArrayList.clear()方法时,它只释放上述值(内存位置)但不释放这些内存位置本身.我将尝试用一个例子来说明这一点:
假设您已拥有内存的当前状态:
[Memory location] (type of variable) *value*
[1000] (int) 32
[1002] (int) 12
[1003] (float) 2.5
Run Code Online (Sandbox Code Playgroud)
然后将它们添加到列表myList中,因此它包含指向1000,1002,1003内存位置的指针.
当您调用myList.clear()时,指针将无效,但内存位置1000,1002,1003仍将包含先前给定的值.我错了吗?
假设我已经定义了一个HashSet<String> set.
在性能方面有什么好处:
set.clear;
Run Code Online (Sandbox Code Playgroud)
要么
set = new HashSet<String>();
Run Code Online (Sandbox Code Playgroud)
编辑:我检查这个的原因是,目前我的代码有第二个选项,但我想将其更改为第一个进行设置final.