我是一个新手,我从前两个答案
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); }
每次我分享它是因为它是可变的或调用者将能够变异它必须复制日期.如果getDate被调用了很多,分配率会大大增加,这会给GC带来压力
另一方面,Java-8日期是不可变的
LocalDate getDate(){ return this.date; }
注意,我不需要复制日期(分配一个新对象),因为不可变(我很高兴与你分享对象,因为我知道你不能变异).
现在你可能会考虑如何将它应用于“有用的”或复杂的数据结构,而不会导致大量的分配(由于防御性副本),你是绝对正确的,但是有一种称为功能编程和持久数据结构的艺术(即:你得到这是一个幻想,它是一个新的副本,其中的副本从原来分享很多).