iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java e.printStackTrace()案例讲解
  • 815
分享到

Java e.printStackTrace()案例讲解

2024-04-02 19:04:59 815人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一、含义 catch(Exception e) { e.printStackTrace(); } 当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将ca

一、含义

catch(Exception e) {
e.printStackTrace();
}
当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;
printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。

二、不建议使用 e.printStackTrace()

     e.printStackTrace() 会导致死?这仅仅是打印啊,怎么可能?!

     先别惊呼不可能,且听我细细道来。

      注意右下角区域,红框部分。这块内存是什么呢?非堆!那么,左边是代码缓存区内存,右边红框就是字符串池,常量,基本类型数据的内存区。然后呢?已经满了。什么原因呢?e.printStackTrace()!

      满了的后果呢?整个WEB服务,访问之后,没响应了,就当是卡死掉了。

       看看有多少web的请求线程,被卡住在打印这一步!原因呢?要打印字符串输出到控制台上,那你字符串常量池所在的内存块要有空间啊。然而,因为e.printStackTrace() 语句要产生的字符串记录的是堆栈信息,太长太多,内存被填满了!注意 上面代码语句:4208行!

     没毛病,没没事儿找事儿冤枉谁。就是这句代码惹的祸!当然,我承认,被 try 住的代码本身就有问题,导致很多调用都会抛异常。

     那么,让我们再来理理整个事件产生的经过: 短时间内大量请求访问此接口 -> 代码本身有问题,很多情况下抛异常  -> e.printStackTrace() 来打印异常到控制台 -> 产生错误堆栈字符串到字符串池内存空间 -> 此内存空间一下子被占满了 -> 开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了 ->  大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)-> 相互等待,等内存,锁死了,整个应用挂掉了。

      综上,这就是 e.printStackTrace()  引发的血案。

总结

  1. 代码质量啊亲,代码不抛异常咱不就能愉快的继续浪么?
  2. 不要使用 e.printStackTrace() ,这玩意,在项目发布后,除过不断的刷控制台,并没用什么卵用啊,建议使用logger输出到日志文件里面啊。
  3. 推及开来,在java中,会产生大量字符串的方法,使用时,一定得悠着点,别一不小心撑到肚子(字符串池所属的那么点非堆内存空间),撑到肚子了,会死的啊 。

三、建议使用 logger.error();

         logger.error("***",  e);

         建议使用logger输出到日志文件里面。

到此这篇关于Java e.printStackTrace()案例讲解的文章就介绍到这了,更多相关Java e.printStackTrace()内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java e.printStackTrace()案例讲解

本文链接: https://www.lsjlt.com/news/132787.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java e.printStackTrace()案例讲解
    一、含义 catch(Exception e) { e.printStackTrace(); } 当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将ca...
    99+
    2024-04-02
  • java volatile案例讲解
    本篇来自java并发编程实战关于volatile的总结。 要说volatile,先得明白内存可见性。那我们就从内存可见性说起。 一、内存可见性 可见性是一种复杂的属性,因为可见性中的...
    99+
    2024-04-02
  • Java ResultSet案例讲解
    ResultSet ResultSet是我们使用jdbc连接时,查询的一个返回结果集,ResultSet resultSet = stmt.executeQuery(sql),下...
    99+
    2024-04-02
  • Java之springcloud Sentinel案例讲解
    一、Sentinel是什么? Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。 它以流量为切入点,从流量控制、熔断降级、系统负载保护等多...
    99+
    2024-04-02
  • Java之操作Redis案例讲解
    首先 下载 jedis.jar包 然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可 创建Java_Control_Redis类...
    99+
    2024-04-02
  • Java之String.format()方法案例讲解
    前言:  String.format()作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,这里根据查阅的资料做个学习笔记,整理成如下文章,供后续复习查阅。 一. f...
    99+
    2024-04-02
  • Java快速排序案例讲解
    交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换”之。在这类排序方法中最常见的是冒泡排序和快速排序。上一篇简单写了冒泡排序,这次简单写一写快速排序。 快速...
    99+
    2024-04-02
  • Response.AddHeader案例讲解
    Response.AddHeader使用实例 1.文件下载,指定默认名 Response.AddHeader("content-type","application/x-msdown...
    99+
    2024-04-02
  • Java之SpringCloudAlibaba Sentinel组件案例讲解
    Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 官...
    99+
    2024-04-02
  • Java之网络编程案例讲解
    Java基础之网络编程 基本概念 IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的。 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通...
    99+
    2024-04-02
  • Java ScheduledExecutorService定时任务案例讲解
    一、ScheduledExecutorService 设计思想 ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线...
    99+
    2024-04-02
  • Java之类加载机制案例讲解
    1.类加载 <1>.父子类执行的顺序 1.父类的静态变量和静态代码块(书写顺序) 2.子类的静态变量和静态代码块(书写顺序) 3.父类的实例代码块(书写顺序) 4.父类...
    99+
    2024-04-02
  • Java之SpringBoot定时任务案例讲解
    1. SpringBoot--任务:定时任务 项目开发中经常需要执行一些定时任务,比如需要在每天凌晨的时候, 分析一次前一天的日志信息,Spring为我们提供了异步执行任务调度的...
    99+
    2024-04-02
  • Oracle rac案例讲解
    rac是什么? 多个不同服务器上的实例,访问共享的数据库文件,扩展了CPU和内存,提高性能;多节点,实现了HA。 rac解决什么问题 高可用性:自动切换、负载均衡 ...
    99+
    2024-04-02
  • Java之常用类小结案例讲解
    Java常用类 包装类 由于Java语言中的基本类型不是面向对象,并不具备对象的性质,实际使用存在很多不便。Java在java.lang包中提供了八种基本类型对应的包装类,可以方便地...
    99+
    2024-04-02
  • Java之IO流面试题案例讲解
    一、Java中IO流分为几种? 按照流的流向分,可以分为输入流和输出流; 按照操作单元分,可以分为字节流和字符流(字节流可以读写任何单位的数据,字符流只可以读写tx...
    99+
    2024-04-02
  • Java之单链表问题解决案例讲解
    单链表 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素...
    99+
    2024-04-02
  • C# NullReferenceException解决案例讲解
    最近一直在写c#的时候一直遇到这个报错,看的我心烦。。。准备记下来以备后续只需。 参考博客: https://segmentfault.com/a/1190000012609600 ...
    99+
    2024-04-02
  • Java之Springcloud Gateway内置路由案例讲解
    Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spring Cloud Gateway中内置了很多路由断言工厂类。不同的断言工厂类...
    99+
    2024-04-02
  • Java实现线程通信的案例讲解
    什么是线程通信、如何实现 所谓线程通信就是线程间相互发送数据,线程通信通常通过共享一个数据的方式实现。 线程间会根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做。 线程通信...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作