1

我用Java编写了一个角色扮演游戏。人类玩家与电脑对战,因此玩家和电脑分别拥有一组英雄和怪物来控制。我已经实现了一套路径查找和其他算法,用于目标获取、路径查找、技能、准确性和健康。问题是,通过同时为不同角色运行算法,游戏很快就会消耗所有可用内存并给出 Java 堆空间错误。现在我可以使用这个脚本运行我的代码:(java -Xmx1g 程序)并增加 Java 堆的数量,但我不知道游戏有多少内存可用,当我计算错误数量时,代码给出了相同的错误和挂起。我的问题是:无论如何在运行时计算可用内存量?我也知道在 Java 中不能在运行时增加堆空间。那么我的问题还有其他解决方案吗?

注意:我已阅读有关 SO 的以下问题,但找不到解决方案:

在 Java 中增加堆大小

java.lang.OutOfMemoryError:Java 堆空间

动态增加java堆空间

4

3 回答 3

2

您可以在运行时检查您有多少可用空间:

Runtime.getRuntime().freeMemory();

但是你不能增加它。

于 2013-08-09T16:01:15.627 回答
1

堆的大小已经动态增长,这不是您需要设置的。

堆的最大大小是固定的(它是最大值)我建议您将其设置得如此之高,以至于您希望程序失败而不是再使用。

于 2013-08-09T16:43:55.430 回答
0
Runtime.getRuntime().freeMemory();

将在 jvm 中为您提供可用的可用内存。

要查看到目前为止您的应用使用了多少,您可以执行以下操作:

Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

你不能动态增加。即使可以,这也不是一个好主意,因为您不知道在客户端的机器上正在运行哪些其他进程。这将导致可怕的缓慢体验。

您的目标应该是找出游戏应用程序可以使用的合理内存量,以考虑您的受众。我可以从手机游戏开发的角度告诉你;如果您想支持中端设备,则游戏在 android 设备中占用的空间不应超过 20mb。

您始终可以进行内存分析,看看您是否可以优化应用程序的任何部分。

于 2013-08-09T16:16:34.370 回答