用于创建大量实例的模拟的垃圾收集
Garbage collection for a simulation that creates a lot of instances
我正在制作一个落沙游戏。这意味着将有很多实例代表每个单独的元素,并且许多元素将被销毁。
这将是一个二维数组,例如 Element[][]
。
我在 Java 中写这个,所以当我删除一个元素(从 2d 数组中取消分配它)时,它仍将保留在内存中,直到垃圾被收集。最终内存会逐渐增加,直到垃圾收集开始,这会冻结游戏。
我想避免任何冻结,并且希望内存使用率可以保持较低。如果垃圾收集器可以 运行 周期性或类似地进行,那么可能会起作用。
总的来说,如果我无法解决这个问题,我不确定我的应用程序是否可以在 Java 中使用。
是否有适合这种情况的首选垃圾收集器或我可以用来处理这种情况的任何其他方法?
JVM 不允许您按需运行垃圾collection。您可以尝试调用 System.gc()
,但它只会 建议 (如 documentation 中所述)JVM 运行 FullGC。
JVM 提供了多种收集器
Serial
and parallel
收藏家使用 Stop The World 方法,因此他们会在 运行ning 时冻结您的游戏。
G1
收集器尝试在延迟和吞吐量之间取得平衡。
我从你的问题中了解到你正在寻找 low-latency 垃圾 collection,因此用户不会注意到停顿。我会推荐其中一位收藏家
因为他们声称 low-latency 有 sub-millisecond 个停顿。
使用 JVM 将无法避免 gc 暂停。它们最终会发生,但选择正确的 GC 可以减少它们的持续时间和发生次数。所以也许 Java 不适合这个用例。
关于保持低内存使用率,这取决于您。垃圾 collection 帮不了你。分配 objects.
时要非常小心
我正在制作一个落沙游戏。这意味着将有很多实例代表每个单独的元素,并且许多元素将被销毁。
这将是一个二维数组,例如 Element[][]
。
我在 Java 中写这个,所以当我删除一个元素(从 2d 数组中取消分配它)时,它仍将保留在内存中,直到垃圾被收集。最终内存会逐渐增加,直到垃圾收集开始,这会冻结游戏。
我想避免任何冻结,并且希望内存使用率可以保持较低。如果垃圾收集器可以 运行 周期性或类似地进行,那么可能会起作用。
总的来说,如果我无法解决这个问题,我不确定我的应用程序是否可以在 Java 中使用。
是否有适合这种情况的首选垃圾收集器或我可以用来处理这种情况的任何其他方法?
JVM 不允许您按需运行垃圾collection。您可以尝试调用 System.gc()
,但它只会 建议 (如 documentation 中所述)JVM 运行 FullGC。
JVM 提供了多种收集器
Serial
and parallel
收藏家使用 Stop The World 方法,因此他们会在 运行ning 时冻结您的游戏。
G1
收集器尝试在延迟和吞吐量之间取得平衡。
我从你的问题中了解到你正在寻找 low-latency 垃圾 collection,因此用户不会注意到停顿。我会推荐其中一位收藏家
因为他们声称 low-latency 有 sub-millisecond 个停顿。
使用 JVM 将无法避免 gc 暂停。它们最终会发生,但选择正确的 GC 可以减少它们的持续时间和发生次数。所以也许 Java 不适合这个用例。
关于保持低内存使用率,这取决于您。垃圾 collection 帮不了你。分配 objects.
时要非常小心