栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

e.printStackTrace() 的危害

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

e.printStackTrace() 的危害

1)内存占用问题

        e.printStackTrace() 在将异常打印到控制台时,将产生错误堆栈信息存入到字符串池中,如果在常量池空间较小异常较多时,常量池空间可能会被异常信息占满,这样其他需要使用或者正在使用此空间的线程就会产生阻塞相互等待的现象,最终抛出 OOM,导致整个应用挂掉。

3)性能问题

        如下代码中的synchronized关键字告诉我们e.printStackTrace()执行时会有并发锁,若果在异常代码频繁被调用执行时,e.printStackTrace()的性能会下降

private void printStackTrace(PrintStreamOrWriter s) {
        // Guard against malicious overrides of Throwable.equals by
        // using a Set with identity equality semantics.
        Set dejaVu =
            Collections.newSetFromMap(new IdentityHashMap());
        dejaVu.add(this);

        synchronized (s.lock()) {
            // Print our stack trace
            s.println(this);
            StackTraceElement[] trace = getOurStackTrace();
            for (StackTraceElement traceElement : trace)
                s.println("tat " + traceElement);

            // Print suppressed exceptions, if any
            for (Throwable se : getSuppressed())
                se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION, "t", dejaVu);

            // Print cause, if any
            Throwable ourCause = getCause();
            if (ourCause != null)
                ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, "", dejaVu);
        }
    }

3)不利于对日志信息的管控,使用logback、log4j可以根据实际业务情况选择性的输入日志级别,便于日志的管理

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号