存储常量(Java对象)需要堆吗?多少钱



所以在我的程序中,我有很多检查,比如:

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次以上(给予或接受(,那么就把它作为一个字段,以避免创建额外的对象。

编辑:当然,这也取决于对象最初的大小,但对于像这种情况下的小对象,则规则为

最新更新