3 回答
TA贡献1773条经验 获得超3个赞
难道更快创建这些对象的类或结构?
您是唯一可以确定该问题答案的人。尝试两种方式,衡量有意义的,以用户为中心的相关性能指标,然后您将了解更改是否对相关方案中的真实用户产生了有意义的影响。
结构消耗较少的堆内存(因为它们更小且更容易压缩,而不是因为它们“在堆栈中”)。但是他们需要比参考副本更长的时间来复制。我不知道您的内存使用或速度的性能指标; 这里有一个权衡,你就是知道它是什么的人。
它是更好的创建这些对象的类或结构?
也许是阶级,也许是结构。根据经验:如果对象是:
1。小
2.逻辑上是不可变的值
3.有很多它们
然后我会考虑把它变成一个结构。否则我会坚持使用引用类型。
如果你需要改变一个struct的某个字段,通常最好构建一个构造函数,该构造函数返回一个正确设置字段的整个新结构。这可能稍微慢一些(测量它!)但在逻辑上更容易推理。
垃圾收集器是否对堆和堆栈上的对象进行了相同的处理?
不,它们不一样,因为堆栈上的对象是集合的根。垃圾收集器不需要问“堆栈中的这个东西是活着的吗?” 因为这个问题的答案总是“是的,它在堆栈上”。(现在,你不能依赖它来保持一个对象存活,因为堆栈是一个实现细节。允许抖动引入优化,例如,注册通常是堆栈值的东西,然后它永远不会在堆栈上所以GC并不知道它仍然存在。一旦注册的对象不能再次被读取,就可以积极收集它的后代。
但垃圾收集器确实必须将堆栈上的对象视为活动,就像它将任何已知的活动对象视为活着一样。堆栈上的对象可以引用需要保持活动的堆分配对象,因此GC必须将堆栈对象视为活动堆分配对象,以便确定实时集。但显然它们不是为了压缩堆而被视为“活动对象”,因为它们首先不在堆上。
明白了吗?
- 3 回答
- 0 关注
- 335 浏览
添加回答
举报