Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么导致操作系统在运行内存密集型Java应用程序后变得缓慢?_Java_Performance_Memory Leaks_Memory Management - Fatal编程技术网

是什么导致操作系统在运行内存密集型Java应用程序后变得缓慢?

是什么导致操作系统在运行内存密集型Java应用程序后变得缓慢?,java,performance,memory-leaks,memory-management,Java,Performance,Memory Leaks,Memory Management,我目前正在运行一个小型java类,用于从MacOSX Snow Leopard上的Eclipse中对图形进行科学计算(它在内部创建了许多大型集合)。我有一台内存为2GB的Macbook,要想成功运行应用程序而不出现OutOfMemory错误,我需要在eclipse上使用-Xmx1200m运行它(我知道这非常重要) 完成我需要运行的所有计算大约需要500秒,而且它还占用了我给它的所有内存(我用macosx进度监视器对它进行了监控,对于Real Mem,它的内存达到了1,2GB) 此应用程序完成后,

我目前正在运行一个小型java类,用于从MacOSX Snow Leopard上的Eclipse中对图形进行科学计算(它在内部创建了许多大型集合)。我有一台内存为2GB的Macbook,要想成功运行应用程序而不出现OutOfMemory错误,我需要在eclipse上使用-Xmx1200m运行它(我知道这非常重要)

完成我需要运行的所有计算大约需要500秒,而且它还占用了我给它的所有内存(我用macosx进度监视器对它进行了监控,对于Real Mem,它的内存达到了1,2GB)

此应用程序完成后,我的MacOSX几乎无法使用。即使我关闭Eclipse,一切都会变得缓慢。我还注意到,无论我之后做什么(即使在关闭Eclipse之后),例如Finder导航都非常慢。渲染某些文件夹或更改目录需要很长时间。有时我重启系统,以便能够再次有效地工作

我想了解发生这种情况时背景中发生了什么? 我的印象是,当一个java类/应用程序完成运行时,垃圾收集器至少在最后会清理所有东西,我本以为其他程序可以再次自由使用这个内存。但它“感觉”像一个影响整个系统的内存泄漏,即使Java应用程序不再运行


我将非常感谢您在这方面的任何提示或阅读

请确保java进程在退出应用程序后正确结束。我对JBoss也有类似的问题,比如退出应用程序后确保java进程正确结束。我对JBoss也有类似的问题,因为你的Mac运行缓慢,因为它有2GB,你有Eclipse,你有1.2GB的应用程序。它可能疯狂地交换

您的Java程序可能存在内存泄漏。您正在向集合中添加,而不是从集合中删除。您可以使用诸如TPTP、NetBeans或VisualVM之类的探查器来搜索它

如果你做了错事,Java程序可能会像其他任何语言一样泄漏


如果你真的需要这么多的内存,而不是内存泄漏,那么如果你不能将程序拆分或将中间结果保存到文件或数据库中,你可能需要购买更多的内存。

你的Mac运行缓慢,因为它有2GB,你有Eclipse运行,你有1.2GB的应用程序。它可能疯狂地交换

您的Java程序可能存在内存泄漏。您正在向集合中添加,而不是从集合中删除。您可以使用诸如TPTP、NetBeans或VisualVM之类的探查器来搜索它

如果你做了错事,Java程序可能会像其他任何语言一样泄漏


如果你真的需要那么多的内存,而不是内存泄漏,那么如果你不能将程序拆分或将中间结果保存到文件或数据库中,你可能需要购买更多的内存。

你所经历的就是页面交换。为了满足Java代码的要求,操作系统已将一堆虚拟内存页逐出(或调出)磁盘。当您的程序完成后,您尝试切换回正在运行的其他程序时,操作系统必须从磁盘进行分页才能继续


通过使用top或Activity Monitor等工具,您可以看到所有这些情况。

您所经历的就是页面交换。为了满足Java代码的要求,操作系统已将一堆虚拟内存页逐出(或调出)磁盘。当您的程序完成后,您尝试切换回正在运行的其他程序时,操作系统必须从磁盘进行分页才能继续


您可以使用top或Activity Monitor等工具查看所有这些情况。

帮自己一个忙,再购买一个2Gb RAM。我现在正在我的MBP上运行32位内核(即较小的内核),内核本身有800Mb的RAM。对于您来说,这将为其他所有内容总共留下1.2Gb。这还不够。相信我,如果你买了额外的RAM,不仅Java进程会更好,而且一切都会看起来更快捷。

帮你自己一个忙,再买一个2Gb的RAM。我现在正在我的MBP上运行32位内核(即较小的内核),内核本身有800Mb的RAM。对于您来说,这将为其他所有内容总共留下1.2Gb。这还不够。请相信我,如果您购买了额外的RAM,不仅Java进程会更好,而且一切看起来都会更快。

您可能会在运行应用程序时疯狂地交换,因此,当你的应用程序结束并释放内存时,OSX仍然需要从磁盘还原所有这些内容。我对Mac并不太熟悉,但对于Windows,我可以检查进程是否仍在运行,即使我关闭了它-你能对Mac也这样做吗?我之所以这么问,是因为我不时会关闭那些从屏幕上消失的应用程序,但相关流程仍在运行并消耗资源。在这种情况下,我要么重新启动,要么手动查找并结束不会正常死亡的僵尸进程……在运行应用程序时,您可能会疯狂地交换,因此,当你的应用程序结束并释放内存时,OSX仍然需要从磁盘还原所有这些内容。我对Mac并不太熟悉,但对于Windows,我可以检查进程是否仍在运行,即使我关闭了它-你能对Mac也这样做吗?我之所以这么问,是因为我不时会关闭那些从屏幕上消失的应用程序,但相关流程仍在运行并消耗资源。在这种情况下,我要么重新启动,要么手动查找并结束不会正常死亡的僵尸进程……OP说,即使Eclipse关闭,速度仍在放缓;关闭Eclipse是否也会关闭它启动的任何Java环境?(诚实的问题是,我对Eclipse在幕后的行为知之甚少,特别是对于Mac电脑。)好的观点。但除此之外,问题是