什么是最好的数组重新初始化:通过迭代设置为null或只是分配一个新的数组?

时间:2011-08-31 05:43:46

标签: java performance memory

在我的代码中,我有一个包含大约1000个元素的数组:

Object[] arr = new Object[1000];

填充完数组后(整个数组或部分数组),我需要重新初始化它。据我所知,我有两个选择:通过 new 关键字初始化它,或者迭代它并将每个元素设置为null。我认为第一种方法比第二种更好,但我也在等待你的想法。

欢迎关于此主题的任何链接或文章。

提前致谢

4 个答案:

答案 0 :(得分:4)

第一个更好。通过使用new关键字重新初始化它,通过提供GC的路径(假设其他活动对象没有对其中任何一个的引用),可以将前一组数组用于垃圾回收。

第二个最终会达到同样的效果,但是因为你需要逐个迭代,所以会增加性能。对于1000条记录,这可能发生得非常快,但如果数量增加,则命中率会更高。

答案 1 :(得分:2)

同意您的第一选择使用arr = new Object[1000]并且不要循环它。

此外,使用新的Object [1000]不会创建1000个对象,它只会为1000个对象创建一个“占位符”,因此这是一个非常便宜的操作。

如果您知道将填充所有1000个对象,您可以按原样使用该数组,而无需重新初始化它。

答案 2 :(得分:0)

首先是Object[] arr = new Object[1000];的最佳方式 你也可以在下面的链接中找到,数组的方式可以初始化

array initialisation

答案 3 :(得分:0)

首先,通过将数组设置为null,您可以有效地告诉GC它可以检查该数组中的所有内容并在必要时进行清理。因此,即使您不打算立即重新开始,也无需遍历这些元素。

话虽如此,你真正明确需要设置一个变量(无论如何用于GC目的)显然为NULL的唯一一次是你不再需要该变量指向的数据,但没有新东西可以放在它的位置和变量,无论出于何种原因,将保持一段时间的范围。在这种情况下,建议将值设置为null,或者更好的是,重新编写代码,以便变量超出范围并为您完成。

例如,在你的例子中,说arr是某个类的静态成员,你只需要在启动时对数组进行一些处理,再也不要再查看它了。在这种情况下,arr的内容将在程序运行的整个时间内保持不变,除非您明确将其设置为null(或为其指定新值)。