可以在应用程序中过于频繁地使用非原始的Integer/Long数据类型,会影响性能吗?

Raj*_*pta 3 java performance

我在我的应用程序中经常使用Long/ Integerdata类型来构建Generic数据类型.我担心使用这些包装器对象而不是原始数据类型可能对性能有害,因为每次它需要创建一个昂贵的操作对象.但似乎我别无选择(当我必须使用带有泛型的原始物)而不是仅使用它们.
但是,如果你可以建议我能做些什么来改善它,那还是会很棒的.或任何方式,如果我可以避免它?

还有什么可能是缺点?

建议欢迎!

Ste*_*n C 7

在我之后重复. "用Java创建对象并不是一项昂贵的操作".

您过早地优化了应用程序.更好的方法是实现其使用自然的方式IntegerLong,然后点击个人资料,以确定瓶颈在哪里.如果分析器告诉您使用IntegerLong是性能问题,那么请查看解决此问题的方法.


如果您确定IntegerLong确实存在问题,可以执行以下操作:

  • 寻找一个实现原始类型"集合"的类库; 例如Trove.但请注意,此类集合类型的API 与其后代兼容java.util.Collection.

  • 使用Integer.valueOf(int)Long.valueOf(long),而不是new Integer(int)new Long(long).这些valueOf方法使用常用对象的缓存来减少对象创建的数量.


@Rex Kerr的评论是,这是一个可怕的建议.他(我认为)说OP应该优化他的应用以减少使用,Integer并且Long在他知道这将是一个性能问题之前.我不同意.

  • 此时(当他问这个问题时),OP并不知道他的应用程序需要优化.如果应用程序运行"足够快"而没有任何优化,那么任何开发人员花在优化上的时间都会花在其他方面.

  • 此时,OP不知道性能瓶颈在哪里.如果他们不处理这些值,那么优化这方面将是浪费时间.请注意,一般来说,完全依靠直觉告诉您瓶颈在哪里或可能在哪里是一个坏主意.

  • @Rex Kerr认为,由于过度使用Integer和修改/重构代码以修复性能问题需要做很多工作Long.这根本不是真的.一个体面的IDE可以轻松地在中小型应用程序中进行此类更改.