是否需要堆来存储常量(Java 个对象)?多少钱?
Does it take heap to store constants (Java objects)? And how much?
所以在我的程序中我有很多检查,例如:
return Optional.ofNullable(issuer)
.orElseThrow(() -> new OAuth2AuthenticationException
new OAuth2Error(code, description, null));
所以我开始考虑创建一个包含大约 6 个字段的常量 class,例如:
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);
我的问题是:这个游戏值得吗?因为每次创建这些对象时它可能会在一段时间内占用更多内存(如果有很多并发用户试图在 momemt 中非法访问资源),但所有这些对象都将被 GC 销毁。
存储 like 6 异常需要多少堆,我应该这样做吗?
a lot of checks
很多支票是什么意思?如果它每秒发生数百或数千次,您将需要使用常量。当您改为使用常量时,它不需要每次都创建一个对象。如果你只做几次,那么你可以换一种方式。
一个好的经验法则是,如果它被使用超过 10 次(给予或接受),那么就将它设为一个字段以避免创建额外的对象。
编辑:这当然也取决于对象最初有多大,但对于像本例中这样的小对象,则规则成立
记住:异常应该只用来表示异常的事情。
如果某些事情实际上是异常的,它很少发生,所以创建一个新对象的额外成本在所有情况下平均为零,即使该对象的构建成本适中。
此外,异常有一个堆栈跟踪,它显示异常被抛出时的调用堆栈(以及原因、被抑制的异常等)。将其存储为常量没有意义,除非您(以某种方式)可以保证在具有完全相同的调用堆栈等的同一线程中抛出异常。
只需创建一个新对象。
如果您使用此例外来表示并不罕见的事物,那么它并不是真正的例外。用别的东西来表示这个。
所以在我的程序中我有很多检查,例如:
return Optional.ofNullable(issuer)
.orElseThrow(() -> new OAuth2AuthenticationException
new OAuth2Error(code, description, null));
所以我开始考虑创建一个包含大约 6 个字段的常量 class,例如:
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);
我的问题是:这个游戏值得吗?因为每次创建这些对象时它可能会在一段时间内占用更多内存(如果有很多并发用户试图在 momemt 中非法访问资源),但所有这些对象都将被 GC 销毁。
存储 like 6 异常需要多少堆,我应该这样做吗?
a lot of checks
很多支票是什么意思?如果它每秒发生数百或数千次,您将需要使用常量。当您改为使用常量时,它不需要每次都创建一个对象。如果你只做几次,那么你可以换一种方式。
一个好的经验法则是,如果它被使用超过 10 次(给予或接受),那么就将它设为一个字段以避免创建额外的对象。
编辑:这当然也取决于对象最初有多大,但对于像本例中这样的小对象,则规则成立
记住:异常应该只用来表示异常的事情。
如果某些事情实际上是异常的,它很少发生,所以创建一个新对象的额外成本在所有情况下平均为零,即使该对象的构建成本适中。
此外,异常有一个堆栈跟踪,它显示异常被抛出时的调用堆栈(以及原因、被抑制的异常等)。将其存储为常量没有意义,除非您(以某种方式)可以保证在具有完全相同的调用堆栈等的同一线程中抛出异常。
只需创建一个新对象。
如果您使用此例外来表示并不罕见的事物,那么它并不是真正的例外。用别的东西来表示这个。