如何在Java中动态计算可用内存量并增加堆空间?

时间:2013-08-09 15:59:21

标签: java memory runtime heap

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

注意:我已经在SO上阅读了以下问题,但找不到解决方案:

{{3} }

Increase heap size in Java

java.lang.OutOfMemoryError: Java heap space

3 个答案:

答案 0 :(得分:2)

您可以在运行系统中查看您有多少可用空间:

Runtime.getRuntime().freeMemory();

但是你无法增加它。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

Runtime.getRuntime().freeMemory();

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

要查看到目前为止您的应用使用了多少,您可以这样做 -

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

您无法动态增加。即使你可以,也不是一个好主意,因为你不知道客户端的机器,正在运行什么其他进程。这将导致可怕的缓慢经历。

您的目标应该是找出游戏应用可以考虑您的受众群体使用的合理内存量。我可以从手机游戏开发的角度告诉你;如果你想支持中档设备,游戏中的Android设备不应超过20mb。

您可以随时进行内存分析,看看您是否可以优化应用的任何部分。