JAVA使用自定义异常的优化——重写fillInStackTrace方法

文章探讨了在进行性能优化时,如何处理自定义业务异常。建议在不需要堆栈信息时,重写Throwable的fillInStackTrace方法以提升性能。通过对比测试显示,10万并发下,重写后的执行时间比未重写快约一倍。通常,业务异常是手动抛出,因此重写为返回this即可。
摘要由CSDN通过智能技术生成

最近在看性能优化相关的东西,就看到了关于自定义业务异常的使用,观点是不建议,如果一定要使用,在不需要知道异常堆栈信息的情况下必须重写Throwable的fillInStackTrace()方法这个方法是native修饰即JVM本地同步方法,native实现是将线程的栈帧信息记录到此 Throwable 对象中,也就是我们看到的发生在哪个类的哪一行代码处等信息。

其实开发中很多时候为了省事都直接在Service层直接抛业务异常,controller捕获业务异常封装结果,至少有时候我是这么写的。这种情况建议重写fillInStackTrace方法,直接返回this即当前业务异常实例对象,只是这样一来异常对象就没有堆栈信息了,一般我们的业务异常都是手动抛出来的所以也不需要知道堆栈信息。

public class ServiceException extends RuntimeException {

	private static final long serialVersionUID = -2437160791033393978L;

	public ServiceException(String msg) {
	  super(msg);
	}

	public ServiceException(Exception e){
	  this(e.getMessage());
	}

    /重写此方法,直接返回,避免调用本地方法爬堆栈信息提高性能
	@Override
	public synchronized Throwable fillInStackTrace() {
		return this;
	}
}

下面做了一个重写和不重写 fillInStackTrace()方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WannaRunning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值