我正在使用安装了4GB内存的双核 XP计算机(但由于32位事实,操作系统仅报告 2.5GB )。我通过使用最新的 Eclipse (编辑,构建和运行)和 Ant (另一种构建和运行方式)来主动修改旧的JAVA应用程序至少一个月。在 Eclipse 运行配置和 build.xml 文件中,我们有以下JVM参数:-Xmx1024M -Xms1024M -Xmn384M
。我们多年来一直在使用这种配置。
我还有一个批处理文件,用这个参数启动Eclipse:-vmargs -Xmx768M
。这个批处理文件已经和我在一起多年了。 (现在我改为修改eclipse.ini进行配置。)
前天,当我使用Ant构建和运行我的应用程序时(我在修改过程中经常构建并运行它),我发现速度要慢得多。我回家之前就重新启动了机器。那天晚上我通过VPN连接我的机器来完成一些修改(我是一名非常优秀的员工。)并且发现速度更慢。第二天早上,当我使用Ant运行应用程序时,“无法让Java虚拟机”开始发生。
我重启了我的机器。然后我无法用同样的错误启动我的Eclipse。我必须更改vmargs以声称只有512MB内存才能启动Eclipse。 Ant的构建时间从大约20秒增加到大约6分钟。我必须将JVM的最大内存减少到
-Xmx512M -Xms512M
在Eclipse运行配置和Ant build.xml中,以避免错误。
然后我卸载我的1.6u24 jdk / jre并安装了1.6u25。我重新安装了Eclipse。使用趋势科技扫描整个计算机但未找到任何内容。
我通常连接的另一台机器进行一些测试也有类似的结果(较慢)。所有其他机器,包括我的同事的机器和我的笔记本电脑,使用相同的应用程序和工具都可以正常工作。
如果我使用Ant来构建和运行它,那么构建过程和启动过程都非常慢。我创建了两个批处理文件来编译和启动我的应用程序。他们正常工作。使用Eclipse编译时,它正常工作。但我现在不能要求JVM在我的应用程序中声明 1024MB 。
我机器上的所有其他活动似乎都很正常。 VisualStudio和C#应用程序照常工作。由于硬盘故障,几周前我的机器重建了。所以没有多少无用的东西可以减慢我的机器速度。
任何人都可以帮我弄清楚为什么我机器上的JVM改变了它的行为?我希望它不是由病毒引起的。在我打电话给IT重建我的机器之前,你知道我能尝试什么吗?
感谢,
答案 0 :(得分:6)
虽然您的配置可能没有更改,但这并不意味着可用内存量没有改变。内存被操作系统中的所有程序使用,因此如果另一个程序的内存使用量略大,则可能无法预先分配您指定的1GB内存(来自命令行参数)必须可用于启动JVM。
另一种可能性是安装/运行了一些新程序,它与您需要的内存潜逃。病毒扫描可能已经安装/更新,仅此一项就可能非常耗费内存(取决于产品)。
最后,您提到机器已重建。您可能希望(通过BIOS)验证您实际上具有与重建之前相同的物理内存量。重建机器有一种有趣的方式,可以将记忆棒从插座中扯出来(或者可能还有更多的重建工作,而不是眼睛)。问题可能很简单,因为没有足够的内存来预先分配给JVM,因为你从较少开始。
如果所有这些都检查出来,请查看晦涩难懂的内容。如果重新安装了一个非常旧的或不同的操作系统,它可能不支持访问所安装的内存。当有人从64位安装恢复到32位安装时,通常会发生这种情况。
答案 1 :(得分:1)
使用Microsoft的任务管理器或进程资源管理器(http://technet.microsoft.com/en-us/sysinternals/bb896653)并检查内存耗尽。如果你必须减少你正在使用的内存量,那么可能是因为其他东西已经占用了它。另外,我发现2.5GB的上限有点奇怪,因为我认为上限更像是3.25GB(主要是因为这是我安装4gb的Windows XP上的内容)。
此外,每次我看到该错误消息都是因为没有足够的物理内存可供抓取。我不得不在过去关闭程序,以便在获得此异常后运行一些事情。
(我会把它放在评论中,但还没有评分:/)
答案 2 :(得分:0)
你能在任务管理器中看到奇怪的东西吗? CPU利用率?事实上你不能分配尽可能多的内存听起来奇怪,但我看到在我的一台开发机器上升级防病毒后,编译时间也有类似的减少。
如果在编译时禁用防病毒软件会怎样?
答案 3 :(得分:0)
这听起来更像是一个配置问题,而不是病毒,特别是考虑到它最近被重建。 您没有提到您是使用32位还是64位Java。知道哪一个在失败时试图运行可能会有所帮助。
要检查的其他事项:虚拟内存设置;操作系统中任何特定于应用程序的设置;反病毒程序设置;其他流程(尝试运行HijackThis和/或MSRT)。