所以在我的程序中我有很多检查,例如:
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);
我的问题是:这款游戏值得吗?因为如果每次创建这些对象,它可能会在一段时间内占用更多内存(如果有很多并发用户试图在同一时间非法访问资源),但所有这些对象都会被 GC 销毁。
存储像 6 这样的异常需要多少堆,我应该这样做吗?
最佳答案
请记住:异常只能用于表示异常事物。
如果某件事实际上是异常的,那么它很少发生,因此创建一个新对象的额外成本在所有情况下平均起来基本上为零,即使该对象的构建成本适中。
此外,异常还有堆栈跟踪,它显示抛出异常时的调用堆栈(以及原因、抑制的异常等)。将其存储为常量是没有意义的,除非您(以某种方式)可以保证在具有完全相同的调用堆栈等的同一线程中引发异常。
只需创建一个新对象。
如果您使用此异常来表示并不罕见的事物,那么它并不是真正的异常。使用其他东西来表示这一点。
关于java - 是否需要堆来存储常量(Java 对象)?多少钱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60996250/