Java程序在Windows下运行但在Mac OS JVM中失败

时间:2012-09-13 00:13:24

标签: java macos jvm

我有一个在Windows下编写的java程序,它运行良好。基本上它与算法有关,并且在它运行期间它通常会消耗几乎完整的CPU容量,这是正常的。

然而,在MacOS下,它总是陷入某些特定点,在这一点上,存在大量数据并且内存消耗达到约240M。该程序仍在运行但不会继续运行。内存未释放但CPU使用率下降到0.我不知道这究竟意味着什么,我不知道发生了什么。

抱歉,我无法提供代码段,因为这不是代码特定部分的问题。任何熟悉JVM的人都可以提供一些提示/建议吗?

2 个答案:

答案 0 :(得分:3)

我要做的第一件事就是采取线程转储并找出谁在做什么。您可以发出kill -3以获取线程转储,或者您也可以连接分析器。有关详细信息,请参阅此答案:Thread Dump Analysis Tool / Method

如果您无法确定正在发生的事情,可能需要在此处发布线程转储。

我的猜测是一个并发错误,就像一个死锁,但我们必须看到线程转储!

答案 1 :(得分:2)

如果您的硬盘驱动器在发生这种情况时很忙,那么这意味着您的JVM使用的不仅仅是可用的物理内存,它只是交换交换文件。交换过程本身不会占用太多CPU,但过程中涉及大量I / O.因此CPU使用率很低。

尝试将堆大小限制为可用的物理RAM (不要增加到总数,因为4 GB计算机在启动JVM时可能只有1 GB可用空间)。 / p>