gpt4 book ai didi

java - 不可变对象(immutable对象)如何帮助减少垃圾收集带来的开销?

转载 作者:IT老高 更新时间:2023-10-28 20:46:22 30 4
gpt4 key购买 nike

我是新手,我从前两个答案 here 中阅读了有关垃圾收集的信息.

现在证明使用不可变对象(immutable对象)是合理的,即使程序员必须创建新对象,与使用现有对象(在多线程应用程序中)相比,this tutorial说创建对象的成本是由由于垃圾收集而减少的内存开销,以及保护可变对象免受线程干扰和内存一致性错误的代码的消除:

The impact of object creation is often overestimated, and can be offset by some of the efficiencies associated with immutable objects. These include decreased overhead due to garbage collection, and the elimination of code needed to protect mutable objects from corruption.

问题是如何?垃圾回收与对象的可变性或不变性有什么关系?

最佳答案

当对象是不可变的时,有时你分配的更少。

简单示例

 Date getDate(){
return copy(this.date);
}

每次我分享它时我都必须复制 Date 因为它是可变的,否则调用者可以改变它。如果getDate被大量调用,分配率会急剧增加,这会给GC

带来压力

另一方面,Java-8 日期是不可变的

LocalDate getDate(){
return this.date;
}

请注意,由于不可变性,我不需要复制日期(分配新对象)(我很高兴与您分享该对象,因为我知道您无法对其进行变异)。

现在你可能会想,我怎样才能将它应用到“有用”或复杂的数据结构而不引起大量分配(由于防御性副本),你是绝对正确的,但是有一种艺术叫做 函数式编程持久化数据结构(即:您会误以为它是一个新副本,而实际上副本与原始副本共享很多内容)。

大多数函数式语言(我所知道的所有语言)都被垃圾回收了,这不足为奇。

关于java - 不可变对象(immutable对象)如何帮助减少垃圾收集带来的开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384393/

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