我有一个项目我正在为一个类编写(用Java),教授说我们不允许使用超过200m 我用-Xmx50m 将堆栈内存限制为50m(只是为了绝对确定)但根据顶部, 它仍然使用 300m
我尝试运行Eclipse 内存分析器,它只报告 26m
难道这一切都是堆栈上的内存吗?我很确定我永远不会超过大约 300 个方法调用的深度(是的,这是一个递归 DFS 搜索),所以这意味着每个堆栈帧几乎都用完了兆字节,这似乎很难相信。
该程序是单线程的。有谁知道我可能会减少内存使用的其他地方?另外,我如何检查/限制堆栈正在使用多少内存?
更新:我现在使用以下 JVM 选项没有效果(根据顶部仍然大约 300m):-Xss104k -Xms40m -Xmx40m -XX:MaxPermSize=1k
另一个更新:实际上,如果我让它运行更长一点(使用所有这些选项)大约一半的时间它会在 4 或 5 秒后突然下降到 150m(另一半不会下降)。真正奇怪的是我的程序没有随机性(正如我所说它是单线程的),所以没有理由在不同的运行中表现不同
它可能与我正在使用的 JVM 有关吗?
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.3) (6b27-1.12.3-0ubuntu1~10.04)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
根据java -h,默认JVM是-server。我尝试添加 -cacao,现在(使用所有其他选项)它只有 59m。所以我想这可以解决我的问题。谁能解释为什么这是必要的?另外,有什么我应该知道的缺点吗?
另一个更新:与服务器相比,可可真的很慢。这是一个糟糕的选择