Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 未处理的异常如何影响JVM?_Java_Exception - Fatal编程技术网

Java 未处理的异常如何影响JVM?

Java 未处理的异常如何影响JVM?,java,exception,Java,Exception,我的项目有大约20个未处理的异常,不管为什么,我想知道它们是如何影响JVM的?它没有崩溃,但我仍然想知道它们在JVM中的足迹是什么。它们去哪里了?所有异常都由您的代码或“未捕获异常处理程序”处理。避免处理异常的唯一方法是从finally块返回或退出程序 未经处理的异常/错误将导致正在运行的线程结束。然而,这是可以接受的回应,没有理由这需要打乱你的申请 异常的一个问题是它们有一些开销,如果创建的异常数量过多,则可能会影响性能。任何未捕获(或)的异常都会杀死抛出抛出该抛出的线程。当没有(非守护进程)

我的项目有大约20个未处理的异常,不管为什么,我想知道它们是如何影响JVM的?它没有崩溃,但我仍然想知道它们在JVM中的足迹是什么。它们去哪里了?

所有异常都由您的代码或“未捕获异常处理程序”处理。避免处理异常的唯一方法是从finally块返回或退出程序

未经处理的异常/错误将导致正在运行的线程结束。然而,这是可以接受的回应,没有理由这需要打乱你的申请

异常的一个问题是它们有一些开销,如果创建的异常数量过多,则可能会影响性能。

任何未捕获(或)的异常都会杀死抛出抛出该抛出的线程。当没有(非守护进程)线程时,JVM进程将退出

如果您在一个好的线程池机制上运行代码,线程池将检测到一个工作线程已死亡,并将在其位置上创建一个新的工作线程。
我个人很喜欢,但却捕捉运行时异常。

每个线程都有一个名为。每当您有一个未被任何人捕获的异常时,就会调用线程的UncaughtExceptionHandler方法。通常,线程会在未处理的异常时终止


我不认为,对于未处理的异常和已处理的异常,有太多的性能需要考虑,因为异常的唯一主要性能问题是填充堆栈跟踪,这是在创建异常本身的过程中完成的(构造函数最终调用)。如果未处理的异常意味着更少的try-catch块(如果您的情况是这样的话),那么您可以从这样的角度考虑,try-catch通常是昂贵的。

JVM完全不受未捕获异常的影响。它通常会杀死线程,但并不总是这样。对于EventQueue,单个事件异常终止,但事件不断发生

未捕获的例外情况并不好。如果您有20个未处理的异常,并且没有其他问题,那么您可以通过删除代码和产生这些异常的线程来提高程序的性能;他们显然没有做任何需要做的事情(至少在产生异常的那一行)

我遇到的最大的问题是,未捕获的异常会破坏程序的稳定性。一个字段得到了一个错误的数字,以后的计算(在其他线程或事件中)使用了这个错误的数字,然后事情就从那里走下坡路了。有时程序会恢复——这在演示中很好——有时会慢慢变得越来越糟——在演示中比异常终止更糟。通常无法看到堆栈跟踪。即使这应该是显而易见的,我知道测试人员和用户在给我打电话之前无法看到它,我已经弄清楚了一定发生了什么,并告诉他们去寻找它。(“哦,是的,这是我的纸牌游戏。抱歉,如果我说它肯定没有显示任何消息。“NullPointerException”。这意味着什么吗?”)

未被注意到的异常通常看起来像是计算中的一个小错误。我已经浪费了很多时间检查我的代码中是否有拼写错误。只有当我确信程序不可能做到它所做的事情时,我才意识到有一个未预料到的例外。而且,这些bug很难复制;该计划变得疯狂,但在不同的地方,以不同的方式。(将系统输出置于纸牌游戏之上,所有调试问题都会消失。)


在Java 1.5中,有一个新方法Thread.setDefaultUncaughtExceptionHandler,它允许您杀死程序或以其他方式处理这种威胁。使用大量的try/catch块可以提供更好的控制(如果您愿意的话),这是(我知道的)在1.5之前处理此问题的唯一方法。

您所说的未处理异常到底是什么意思?这些异常是已检查的还是未检查的?直到现在才知道UncaughtExceptionHandler。10倍!