Java崩溃Windows

时间:2010-01-07 22:07:36

标签: java windows jvm crash

我一直在使用J2EE和Derby数据库开发Java应用程序。我的老板做了大部分的测试,我做了大部分的编码,但是他带着一个奇怪的问题来找我。他声称Java应用程序偶尔会“崩溃他的计算机”。

要提一些细节,首先让我说我目前正在远程工作,所以当这些“崩溃”发生时我无法出现。其次,我使用OS X 10.6并使用Windows XP(我相信SP3)。有问题的Java应用程序不使用任何JNI或任何奇怪的东西,除了嵌入式Derby数据库。最后,他说它冻结了Windows中的所有东西(他的鼠标甚至没有移动) - 它没有像未被捕获的异常一样出现在控制台中。

那么,我的Java程序可能会崩溃他的计算机吗?我不认为Java代码可能在JVM之外具有任何系统范围的影响。这是否可能是我的程序的错误,或者我应该忽略它并将其归因于他的计算机的某些问题?

6 个答案:

答案 0 :(得分:3)

对于Java应用程序崩溃运行的操作系统,JVM中必定存在错误。也就是说有些情况会产生同样的印象:

  • Java应用程序可以扩展其堆,远远超过操作系统开始交换而其他应用程序似乎放慢速度停止
  • Java应用程序可以通过紧凑的循环中的一个或多个线程获取所有CPU

如果您可以设置测试人员的计算机,以便在问题发生时触发堆转储,则可以远程分析该转储。例如,在alphaworks上找到IBM的Java heap analyzer

答案 1 :(得分:2)

由于图形驱动程序不良,在IBM Thinkpads(以及其他我认为合适的机器)的Windows下发生崩溃之前的情况。我建议做通常的事情,确保司机是最新的只是为了安全起见。

虽然您的代码可能不会直接使用JNI,但很多内容可能会发生(基本上与底层操作系统集成的任何内容)。这意味着司机可能是一个大问题。

另一件事是确保使用最新版本的Java(如果最终版本的Java版本不能使用1.6_17)。

为我修复随机崩溃的另一件事是重新安装内存(拔掉它并将其重新插入)。

答案 2 :(得分:2)

  

他说它冻结了Windows中的所有内容(他的鼠标甚至没有移动)

用户模式应用程序 - 无论是Java还是其他 - 都不能对像WinNT这样的现代操作系统那样做。

他有硬件问题,或者是坏驱动程序。

答案 3 :(得分:1)

要使整台计算机崩溃,请尝试以下操作:

public void crashComputer() {
    while(true)
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true) {
                    crashComputer();
                }
            }
        }).start();
}

public void crashJVM() {
    while(true)
        crashJVM();
}

crashComputer函数大约需要2秒才能使整个计算机崩溃。您可以通过按住电源按钮来阻止它崩溃。

crashJVM函数只是通过重载堆栈来崩溃JVM,导致堆栈溢出(这个网站的名称来自哪里)。

警告:使用风险由您自行承担。这不会损坏您的计算机,但如果您忘记单击保存在文档或其他内容,我就不会受到指责。

答案 4 :(得分:0)

同时检查客户端(Windows / XP)系统上的页面文件空间。

答案 5 :(得分:0)

第一点:在我的XP,SP3系统上,当任何程序完全倾斜时,它几乎锁定了计算机。当我的防病毒程序检查更新时,其他一切都停止用于所有实际目的,并且它使用非常少的CPU(似乎一直写入磁盘)。使用100%CPU,我自己的无限循环具有类似的效果。 (为什么任务管理器没有优先于具有“正常”优先级的用户程序,我不知道。)

第二点:在我曾经使用的任何计算机上,繁重的分页会使程序几乎完全停止。

首先使用具有512Mb实内存和2000Mb虚拟内存的XP计算机。编写一个包含1400Mb数组和其他数据结构的Java程序。放入一个重复数十亿次的循环,并在每次执行时读取或写入1400Mb中的每个字节。直到宇宙自身崩溃很久之后,这个程序才能完成。电脑什么都不做。我没有尝试过,我不打算这样做,但即使鼠标不动也会打赌。根据计算机的不同,唯一的解决方法可能是将电源插头从墙壁插座中拔出。 (请注意,从技术上讲,计算机没有崩溃。事实上,它工作得很好。但是你需要耐心等待。在计划点击前一天移动鼠标。)

这个故事的寓意是避免使用XP和虚拟内存,但如果你必须处理这两个问题,请注意这些问题。