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

最近在看性能优化相关的东西,就看到了关于自定义业务异常的使用,观点是不建议,如果一定要使用,在不需要知道异常堆栈信息的情况下必须重写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()方法

猜你喜欢

转载自blog.csdn.net/qq_29569183/article/details/114484545
今日推荐