【发布时间】:2023-03-03 23:34:01
【问题描述】:
我目前在 MacOSX Snow Leopard 上的 Eclipse 中运行一个小型 Java 类,用于对图形(内部创建大量巨大的集合)进行科学计算。我有一台具有 2GB RAM 的 Macbook,并且要成功运行应用程序而不会出现 OutOfMemory 错误,我需要使用 -Xmx1200m 从 eclipse 运行它(我知道这非常重要)。
完成我需要运行的所有计算大约需要 500 秒,它还用尽了我给它的所有内存(我使用 macosx 进度监视器对其进行了监控,Real Mem 达到 1.2GB)
完成此应用程序后,我的 MacOSX 几乎无法使用。即使我关闭 Eclipse,一切都会变得缓慢而缓慢。我还注意到,无论我之后做什么(即使在关闭 Eclipse 之后),例如Finder 导航很慢。渲染某些文件夹或更改目录需要很长时间。有时我重新启动系统以便能够再次有效地工作。
我想了解发生这种情况时在后台发生了什么? 我的印象是,当一个 java 类/应用程序完成运行时,垃圾收集器至少在最后会清理所有内容,我希望其他程序可以再次免费使用该内存。但它“感觉”就像影响整个系统的内存泄漏,即使 Java 应用程序不再运行。
我将不胜感激在这个方向上的任何提示或阅读。
【问题讨论】:
-
您可能在运行应用程序时疯狂地进行交换,因此当您的应用程序结束并释放内存时,OSX 仍然需要从磁盘恢复所有这些内容。
-
我对 Mac 不太熟悉,但在 Windows 中,即使我关闭了某个进程,我也可以检查它是否仍在运行 - 你可以对 Mac 做同样的事情吗?我问是因为我不时关闭了从屏幕上消失的应用程序,但相关进程仍在运行并消耗资源。在这些情况下,我要么必须重新启动,要么手动查找并结束不会正常死亡的僵尸进程......
标签: java performance memory-leaks memory-management