gpt4 book ai didi

java - 参数对象与长参数列表的性能

转载 作者:行者123 更新时间:2023-11-30 03:22:59 25 4
gpt4 key购买 nike

我理解在处理具有长参数列表的方法时使用参数对象的原因。但我有一种情况,我想减少代码的内存占用。

The question I have is from a performance perspective. How much benefit would I get by going to a long parameter list?

用例是这些方法最终将被调用数千次,并且每次调用时都会创建一个新的参数对象。我真的想避免创建所有这些参数对象。

有没有一种“鱼与熊掌兼得”的解决方案,将参数封装起来,只使用堆栈存储?

不幸的是,调用链中有多个方法需要所有这些参数,并且我不介意进行此更改,因为这些方法不是公开的。只是想知道性能更好的解决方案。

进行此更改将影响很大一部分代码,并且会花费我大量的时间。只是想在走这条路之前检查一下这是否值得做出改变。

数据结构

数据结构是一个对象图。对象是业务数据,连接它们的边是调用。这些边缘与参数数据相关联。使用参数对象很漂亮,而且我的代码运行得很好。但我对自己的表现并不满意,想要改进。

我已经分析了我的代码,这些对象是内存开销的重要组成部分。我怀疑它们是否对 CPU 开销贡献很大,但我绝对担心内存。

This data structure will be part of a framework that will be used in a highly concurrent environment. So reducing memory footprint is of utmost concern to me.

参数对象有大约 10 个字段以及一些与之相关的行为。我总是可以选择封装行为。

最佳答案

有很多技术。

如果担心内存开销,可以创建一个固定的参数对象池,然后在释放到池中时将其清除。这样,您可以从池中获取参数对象,设置值(我希望是基元),然后将其传递。完成后,您将参数对象放弃给池,然后允许重用它。

请记住,Java 中的对象创建与 C++ 或其他语言(其中对象的创建通常非常昂贵)中的对象创建具有不同的性能。在某些情况下,额外的对象不会花费太多(如果有的话),由于 JVM 优化,单个对象创建通常会分配支持六个或更多"new"调用所需的内存。

最后,关于使用堆栈存储,Java中支持对象的“堆栈存储”,但为了与语言设计保持一致,它是在JVM的遗赠下完成的,并且在代码中具有相同的表现作为堆存储的对象。我并不完全熟悉人们用来让对象为可能的堆栈存储做好准备的技术,但我确实知道你不能保证这一点。

关于java - 参数对象与长参数列表的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com