0

我已经搜索过这个,但似乎无法找到一个直接的答案。

基本上我有一些代码可以创建一个数组的副本(Arrays.copyOf用于创建int[]),它会做一些工作并输出结果或将结果发送Arrays.copyOf到队列以进行进一步处理。

如果我更改结果副本,我的结果不再正确,所以我认为我需要它,但我想知道完成后是否有什么可以做的,因为根据我的内存分析,它占用了我所有的内存和垃圾收集有帮助,但是它只是再次建立起来。我真的不确定这是否会有所帮助,但我想测试一下,如果我int[]在将其提交到队列后以某种方式将其删除,那么我的程序是否能像使用更小的内存占用一样运行。

我是 Java 新手,所以如果这个逻辑完全有缺陷,还有其他方法可以达到相同的结果吗?底线是我正在创建一个新数组,它被使用了一点,但在不再需要时徘徊(它占用了我最大内存的 15G,然后我相信垃圾收集器会进来并减少它,但它会在几个秒)。也许我可以将变量设置为 null 或者一旦我确定它不需要它(我正在复制的对象非常大)?

这里有一些代码只是为了说明我的意思(它有点蹩脚,但希望它能让你理解它在代码中的设置,所有这些都在多线程可调用中):

 while(!queue.isEmpty()) {
                int[] data_list = Arrays.copyOf(current.list, current.list.length);

                    if (things work) {
                        Sysout("print results");
                    } else if (current.k > 0) {
                        queue.add(new Queue(data_list)); 

                    }
                }
            }
4

1 回答 1

1

一般来说,这里要做的是“相信垃圾收集器知道它在做什么”。JVM 非常擅长判断何时不再需要对象,尤其是如果它可以证明一个对象没有“逃避”创建它的方法。

Java 甚至没有提供删除对象正在使用的内存的方法,除了消除对它的所有引用——这正是您正在做的事情。

于 2012-04-12T15:38:01.290 回答