Java 未处理的异常如何影响JVM?
我的项目有大约20个未处理的异常,不管为什么,我想知道它们是如何影响JVM的?它没有崩溃,但我仍然想知道它们在JVM中的足迹是什么。它们去哪里了?所有异常都由您的代码或“未捕获异常处理程序”处理。避免处理异常的唯一方法是从finally块返回或退出程序 未经处理的异常/错误将导致正在运行的线程结束。然而,这是可以接受的回应,没有理由这需要打乱你的申请 异常的一个问题是它们有一些开销,如果创建的异常数量过多,则可能会影响性能。任何未捕获(或)的异常都会杀死抛出抛出该抛出的线程。当没有(非守护进程)线程时,JVM进程将退出 如果您在一个好的线程池机制上运行代码,线程池将检测到一个工作线程已死亡,并将在其位置上创建一个新的工作线程。Java 未处理的异常如何影响JVM?,java,exception,Java,Exception,我的项目有大约20个未处理的异常,不管为什么,我想知道它们是如何影响JVM的?它没有崩溃,但我仍然想知道它们在JVM中的足迹是什么。它们去哪里了?所有异常都由您的代码或“未捕获异常处理程序”处理。避免处理异常的唯一方法是从finally块返回或退出程序 未经处理的异常/错误将导致正在运行的线程结束。然而,这是可以接受的回应,没有理由这需要打乱你的申请 异常的一个问题是它们有一些开销,如果创建的异常数量过多,则可能会影响性能。任何未捕获(或)的异常都会杀死抛出抛出该抛出的线程。当没有(非守护进程)
我个人很喜欢,但却捕捉运行时异常。每个线程都有一个名为。每当您有一个未被任何人捕获的异常时,就会调用线程的UncaughtExceptionHandler方法。通常,线程会在未处理的异常时终止
我不认为,对于未处理的异常和已处理的异常,有太多的性能需要考虑,因为异常的唯一主要性能问题是填充堆栈跟踪,这是在创建异常本身的过程中完成的(构造函数最终调用)。如果未处理的异常意味着更少的try-catch块(如果您的情况是这样的话),那么您可以从这样的角度考虑,try-catch通常是昂贵的。JVM完全不受未捕获异常的影响。它通常会杀死线程,但并不总是这样。对于EventQueue,单个事件异常终止,但事件不断发生 未捕获的例外情况并不好。如果您有20个未处理的异常,并且没有其他问题,那么您可以通过删除代码和产生这些异常的线程来提高程序的性能;他们显然没有做任何需要做的事情(至少在产生异常的那一行) 我遇到的最大的问题是,未捕获的异常会破坏程序的稳定性。一个字段得到了一个错误的数字,以后的计算(在其他线程或事件中)使用了这个错误的数字,然后事情就从那里走下坡路了。有时程序会恢复——这在演示中很好——有时会慢慢变得越来越糟——在演示中比异常终止更糟。通常无法看到堆栈跟踪。即使这应该是显而易见的,我知道测试人员和用户在给我打电话之前无法看到它,我已经弄清楚了一定发生了什么,并告诉他们去寻找它。(“哦,是的,这是我的纸牌游戏。抱歉,如果我说它肯定没有显示任何消息。“NullPointerException”。这意味着什么吗?”) 未被注意到的异常通常看起来像是计算中的一个小错误。我已经浪费了很多时间检查我的代码中是否有拼写错误。只有当我确信程序不可能做到它所做的事情时,我才意识到有一个未预料到的例外。而且,这些bug很难复制;该计划变得疯狂,但在不同的地方,以不同的方式。(将系统输出置于纸牌游戏之上,所有调试问题都会消失。)
在Java 1.5中,有一个新方法Thread.setDefaultUncaughtExceptionHandler,它允许您杀死程序或以其他方式处理这种威胁。使用大量的try/catch块可以提供更好的控制(如果您愿意的话),这是(我知道的)在1.5之前处理此问题的唯一方法。您所说的未处理异常到底是什么意思?这些异常是已检查的还是未检查的?直到现在才知道UncaughtExceptionHandler。10倍!