有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java My代码在调用垃圾收集器后不会终止

我有一个大型程序,由一个具有数千次迭代的主类组成。代码在每次迭代中调用四个方法,并将每个方法的结果保存在ArrayList中,最后报告结果中的最佳解决方案

我想把我的主类放在一个for循环中,并运行我的代码20次。首先,我遇到了一个堆空间错误。我使用垃圾收集器来解决这样的错误:在主类的末尾,(在使不必要的ArrayList=null之后),我放置“System.gc”

再次运行5次后,我遇到了堆空间错误,但这次为了解决这个问题,我在每个方法中都放了“System.gc”,但是我的代码运行了几个小时,没有终止,应该在5到6分钟内完成!我怎样才能解决这个问题


共 (2) 个答案

  1. # 1 楼答案

    Java在收集了所有可能的垃圾之后才会抛出OutOfMemoryError。因此,在这种情况下,手动调用垃圾收集器是没有帮助的

    在每个方法中使用System.gc();调用的主要效果是让一切都变得非常缓慢。即使没有发现新的垃圾,一个完整的垃圾收集周期自然也是一个大的操作

    相反,increase the amount of memory you allocate to the JVM。和/或重新设计程序,一次在内存中保存更少的数据

  2. # 2 楼答案

    你无法真正控制垃圾收集,使用“System.gc”你可以标记代码让收集器说“嘿,我有需要删除的东西”,但它是否运行gc并不在你的掌握之中。还要注意的是,只有那些没有引用的对象才会被GC永久删除