繁体   English   中英

Java崩溃的Windows

[英]Java Crashing Windows

我一直在使用J2EE和Derby数据库开发Java应用程序。 我的老板负责大部分测试,我负责大部分编码,但是他遇到了一个奇怪的问题。 他声称Java应用程序有时会“破坏计算机”。

提及一些细节,首先让我说我当前正在远程工作,所以当这些“崩溃”发生时,我就不在身边。 其次,我使用OS X 10.6,而他使用Windows XP(我相信是SP3)。 除了嵌入式Derby数据库之外,所讨论的Java应用程序不使用任何JNI或任何奇怪的东西。 最后,他说它将冻结Windows中的所有内容(他的鼠标甚至不动)-不会像未捕获的异常那样显示在控制台中。

那么,我的Java程序是否有可能导致其计算机崩溃? 我认为Java代码不会在JVM之外对系统产生任何影响。 这可能是我程序的错误,还是我应该忽略它,并将其归因于他的计算机出现问题?

要使Java应用程序崩溃使其运行的操作系统,JVM中必须存在一个错误。 也就是说,在某些情况下可能会产生相同的印象:

  • Java应用程序可以将其堆增大到足以使操作系统开始交换并且其他应用程序似乎变慢的速度
  • Java应用程序可以在一个紧密的繁忙循环中通过一个或多个线程抢占所有CPU

如果可以设置测试人员的计算机,以便在出现问题时可以触发堆转储,则可以远程分析该转储。 例如,在alphaworks上使用IBM的Java堆分析器

之前曾发生过由于图形驱动程序错误而在IBM Thinkpads(我确定是其他机器)的Windows下崩溃的情况。 我建议您做平常的事情,以确保驱动程序是最新的,只是为了安全起见。

尽管您的代码可能不会直接使用JNI,但在幕后发生的事情很多(本质上与底层OS集成的东西)都可以。 这意味着驱动程序可能是个大问题。

另一件事是要确保使用的是Java的最新版本(如果最后无法使用1.6_17的Java版本是最新版本)。

对我来说,固定的随机崩溃的另一件事是重新安置内存(拔下内存并重新插入)。

他说它将冻结Windows中的所有内容(他的鼠标甚至不动)

用户模式应用程序(无论是Java还是其他方式)无法在WinNT这样的现代OS上做到这一点。

他遇到硬件问题或驱动程序不良。

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

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崩溃,从而导致堆栈溢出(这就是该网站的名称)。

警告:使用风险自负。 这不会损坏您的计算机,但是如果您忘记单击“保存在文档或其他内容上”,我不承担任何责任。

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

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

第二点:在我使用过的任何计算机上,繁重的分页都会使程序几乎停止运行。

因此,从具有512Mb实际内存和2000Mb虚拟内存的XP计算机开始。 编写一个具有1400Mb的数组和其他数据结构的Java程序。 放入一个重复数十亿次的循环,并在每次执行时读取或写入该1400Mb中的每个字节。 直到宇宙自身崩溃很长时间之后,该程序才会结束。 电脑将无能为力。 我没有尝试过,也没有打算,但是即使鼠标不会移动,我也会打赌。 根据计算机的制造商,唯一的解决方法可能是将电源插头从墙上插座中拔出。 (请注意,从技术上讲,计算机没有崩溃。确实,它可以正常工作。但是您需要耐心等待。在计划单击鼠标的前一天移动鼠标。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM