`

Exception对性能的影响

 
阅读更多

我们知道,当程序发生异常时,会通过new调用异常的构造方法,在堆内存区域创建一个异常实例。而构造方法都是默认调用基类的Throwalbe的构造方法,下面我们看一下代码:

    public Throwable() {
        fillInStackTrace();
    }

    public Throwable(String message) {
        fillInStackTrace();
        detailMessage = message;
    }

 可以看到,基类的构造方法中都调用了 一个叫fillInStackTrace()的方法,而这个方法的作用,便是用来保存运行时栈的快照,以便在处理异常时打印出调用栈信息。

 

这里先解释一下运行时栈。jvm在执行代码时,会将代码的调用按顺序依次压入栈中,比如一般的action+service+dao的结构,栈底就是action的代码,中间是service,栈顶是dao,然后pop出来执行。中间不会任何停顿。

 

而当发生Exception时,需要将此时运行时栈hold住,并保存一份快照,这对性能的影响是非常大的。

 

另外,在进行异常处理时,一般为了便于查找异常的原因,程序员都会调用e.printStrackTrace()来打印异常信息。再来看一下代码:

 public void printStackTrace() {
        printStackTrace(System.err);
    }

    public void printStackTrace(PrintStream s) {
        synchronized (s) {
            s.println(this);
            StackTraceElement[] trace = getOurStackTrace();
            for (int i=0; i < trace.length; i++)
                s.println("\tat " + trace[i]);

            Throwable ourCause = getCause();
            if (ourCause != null)
                ourCause.printStackTraceAsCause(s, trace);
        }
    }

 

可以发现,实际上是将错误信息交给了标准的错误流打印出来,同样也会有性能影响。

 

 

 

 

分享到:
评论

相关推荐

    ExceptionLog

    6. **性能影响**:优秀的异常日志工具会考虑到性能影响,确保在不影响正常程序运行的前提下收集异常信息。 7. **集成与扩展**:ExceptionLog可能支持与其他开发工具或框架的集成,比如IDE、版本控制系统、持续集成...

    exception C++ & More exception C++

    书中可能还会涉及更高级的主题,比如异常安全的编程技巧、自定义异常类、多层异常处理和异常的性能影响等。 通过阅读"More Exceptional C++.chm"和"Exceptional C++.chm",开发者能够深入理解C++异常处理的精髓,...

    Android Native Exception

    ### Android Native Exception详解 #### 一、概览 在Android系统中,应用程序主要基于Java运行时环境进行开发,但也有不少部分是...此外,掌握Native Exception的处理流程也是提高应用稳定性和性能的重要手段之一。

    C++Exception 异常处理 源码

    此外,异常规范在某些情况下可能影响性能。 总结来说,C++的异常处理机制为程序员提供了一种强大的工具,用于处理程序运行时可能出现的错误情况。通过熟练运用`try`、`catch`和`throw`,开发者可以编写出更加健壮和...

    Exception

    处理异常是指对捕获到的异常进行适当的反馈,如记录日志、显示用户友好的错误信息,或者尝试恢复程序的正常运行。 标签中提到了"源码",这可能意味着文章深入探讨了异常处理的内部实现机制,比如Java或C++等语言中...

    Uncaught DOMException:

    7. **工具使用**:标签中的“工具”可能暗示了利用开发者工具中的断点、步进执行和性能分析等功能来诊断问题。 8. **博文链接**:提供的博文链接指向iteye博客的一篇文章,可能提供了关于这个错误更具体的上下文或...

    Laravel开发-laravel-exception-logger

    - 这个项目可能提供了对默认异常处理的增强,允许开发者统一管理不同应用的异常记录,比如通过单一接口或中央服务来收集和分析异常。 - 可能包含自定义的异常处理器,以便在全局范围内捕获特定类型的异常,或者...

    Exception C++系列

    9. 性能考虑:虽然异常处理为错误处理提供了强大工具,但过度使用异常可能会对性能产生影响。因此,需要在效率和代码清晰性之间找到平衡。 10. 非异常错误处理:异常不是处理所有错误的唯一方法,有时使用返回值、...

    exception 需要解决的问题

    在IT行业中,异常处理是程序...因此,理解和掌握异常处理不仅对于个人技能提升,也对团队整体的项目质量有重大影响。通过不断学习和实践,我们可以更好地应对"exception 需要解决的问题",编写出更加健壮和可靠的软件。

    基于virtio-user的新exception path方案.pdf

    总的来说,virtio-user + vhost-net作为一种新的exception path方案,在维护性、灵活性、性能等方面都显示出了明显的优势。通过实际测试和验证,它在保持DPDK高性能包处理的同时,为特定情况下的网络数据处理提供了...

    android Kernel Exception

    ### Android Kernel Exception详解 ...通过对内核异常处理流程、日志信息、内存布局以及具体案例的分析,我们可以更深入地理解这些问题,并采取相应的措施来减少此类异常的发生,进而提升系统的整体性能和稳定性。

    java解决nested exception is java.lang.OutOfMemoryError Java heap space

    Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...

    各种API性能_性能优化技巧

    ### 各种API性能与性能...综上所述,性能优化不仅涉及到具体的API选择,还需要考虑代码的设计、数据结构的选择以及对操作系统版本的要求等多个方面。通过对这些知识点的理解和应用,可以有效地提升应用程序的整体性能。

    如何用C#在VS2005中创建自己的Exception详解

    3. 对于可能引发异常的代码,使用try-catch块进行异常处理,但不要过度使用,以免影响性能。 通过以上步骤,我们成功地在VS2005中创建了自己的异常类`MyCustomException`。这个自定义异常类可以方便地在项目中捕获...

    exception testing automation

    1. 提升软件质量:通过测试可以评估和改进软件性能,确保其稳定性和可靠性。 2. 简化软件维护和进化:良好的测试基础使软件的修改和扩展更为容易。 3. 应对复杂性:大型和复杂的软件系统需要自动化测试来覆盖各种...

    emqx-windows-exception.zip mqtt

    在本场景中,`emqx-windows-exception.zip` 是一个包含EMQ X Broker在Windows操作系统上的异常处理或特定版本的压缩包。 EMQ X Broker作为MQTT服务器,提供了以下关键功能和特性: 1. **高可用性**:支持集群模式...

    C++ exception

    过度使用异常处理可能导致性能下降,因为它涉及到额外的运行时开销。因此,应该明智地使用异常,仅在预期的错误情况下使用`throw`,并将`catch`块用于处理不可预见的错误或异常情况。 在学习C++异常处理时,理解其...

Global site tag (gtag.js) - Google Analytics