加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Immutable对象如何帮助减少垃圾回收引起的开销?

发布时间:2020-12-14 05:10:59 所属栏目:Java 来源:网络整理
导读:我是一个新手,我从前两个答案 here中看过垃圾收集. 现在,即使程序员必须创建新对象,与使用现有对象(在多线程应用程序中)相比,现在证明使用Immutable对象,this tutorial表示,通过减少内存开销来弥补对象创建的成本到垃圾回收,并且消除代码来保护可变对象免受
我是一个新手,我从前两个答案 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;
}

注意,我不需要复制日期(分配一个新对象),因为不可变(我很高兴与你分享对象,因为我知道你不能变异).

现在你可能会考虑如何将它应用于“有用的”或复杂的数据结构,而不会导致大量的分配(由于防御性副本),你是绝对正确的,但是有一种称为功能编程和持久数据结构的艺术(即:你得到这是一个幻想,它是一个新的副本,其中的副本从原来分享很多).

不要惊讶,大多数功能语言(我所知道的所有语言)都是垃圾回收的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读