所以在我的程序中,我有很多检查,比如:
return Optional.ofNullable(issuer)
.orElseThrow(() -> new OAuth2AuthenticationException
new OAuth2Error(code, description, null));
所以我开始考虑创建一个常量类,它包含大约6个字段,比如:
public static final OAuth2AuthenticationException ISSUER_IS_NOT_TRUSTED_EXCEPTION =
new OAuth2AuthenticationException(new OAuth2Error(
INVALID_ISSUER, "Issuer is not trusted", null));
现在我有了类似的东西:
return Optional.ofNullable(issuer)
.orElseThrow(() -> ISSUER_IS_NOT_TRUSTED_EXCEPTION);
我的问题是:这场比赛值得吗?Coz在每次创建这些对象的情况下,可能会在一段时间内占用更多内存(如果有很多并发用户试图非法访问资源(,但所有这些对象都会被GC破坏。
存储类似6的异常需要多少堆?我应该这样做吗?
请记住:异常只能用于表示异常。
如果某个东西实际上是异常的,它很少发生,所以创建一个新对象的额外成本,在所有情况下的平均值,基本上为零,即使该对象的构建成本适中。
此外,异常有一个堆栈跟踪,它显示抛出异常时的调用堆栈(以及原因和抑制的异常等(。将其存储为常量是没有意义的,除非您(以某种方式(能够保证异常被抛出到具有完全相同调用堆栈等的同一线程中。
只需创建一个新对象。
如果你使用这个异常来表示一些不罕见的东西,那么它就不是真正的异常。用其他东西来表示这一点。
很多检查
你说的大量支票是什么意思?如果它每秒发生数百或数千次,你会想要使用一个常数。当您使用常量时,它不需要每次都创建一个对象。如果你只做了几次,那么你可以换一种方式。
一个好的经验法则是,如果它被使用了10次以上(给予或接受(,那么就把它作为一个字段,以避免创建额外的对象。
编辑:当然,这也取决于对象最初的大小,但对于像这种情况下的小对象,则规则为