我是一个新手,我从前两个答案 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;
}

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

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

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

java – Immutable对象如何帮助减少垃圾回收引起的开销?的更多相关文章

  1. React Immutable使用方法详细介绍

    Immutable.js出自Facebook,是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构,使用结构共享。所有的更新操作都会返回新的值,但是在内部结构是共享的,来减少内存占用

  2. 详解Immutable及 React 中实践

    Immutable 可以给 React 应用带来数十倍的提升,也有人说 Immutable 的引入是近期 JavaScript 中伟大的发明,因为同期 React 太火,它的光芒被掩盖了。这篇文章主要介绍了Immutable及 React 中的实践,需要的朋友可以参考下

  3. redux持久化之redux-persist结合immutable使用问题

    这篇文章主要为大家介绍了redux持久化之redux-persist结合immutable使用问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. react中使用antd及immutable示例详解

    这篇文章主要为大家介绍了react中使用antd及immutable示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. Immutable & Redux in Angular Way

    通过保证@Input的输入Immutable可以提升Angular的性能,但是counter数据在countercomponent中并不是Immutable,数据的修改同样难以被追踪,下一节我们来介绍使用Redux思想来构建Angular应用。

  6. javascript – 使用D3.js和Immutable.js

    在我的应用程序中,我使用D3.js进行一些可视化.现在D3使用可变的本机JavaScript数据结构.因此,一些数据编组对于使用Immutable.js是必要的.我也使用Relux和React,所以在我的商店里我管理一个不可变的地图.由于这个Map在每次更改时都会成为新东西,因此我无法将其传递给D3ForceLayout,因为它适用于可变数据,因此每次从头开始重新计算所有内容.我最终管理了不可变和

  7. javascript – 根据属性值从ImmutableJS列表中删除对象

    根据属性的值从列表中删除对象的最简单的方法是什么?我正在寻找相当于MongoDB中的$pull.我的列表看起来很简单:而且我想从数组中删除属性设置为’1’的对象.在MongoDB中,我会这样做:如何使用ImmutableJS获得相同的结果?解决方法你可以简单地说filter不可变的列表:但是,对非空列表进行过滤将导致不同的不可变列表,因此您可能需要首先检查{a:1}的发生.

  8. Guava的ImmutableList.Builder线程是否安全?

    Guava’sImmutableList.Builder的线程安全保障是什么?javadoc不说.解决方法虽然番石榴不变的课程是线程安全的,但他们的建设者并不是这样.对于大多数应用程序,只有一个线程将与任何特定的Builder实例交互.虽然没有线程安全性通常不需要记录,但是Javadoc可能对于Immutable集合构建器是有意义的.人们可能会惊讶于ImmutableList是线程安全的,而Imm

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

    垃圾收集与物品的可变性或不变性有什么关系?

  10. 将java.util.HashMap转换为java中的scala.collection.immutable.Map

    解决方法完全可以在Java代码中使用JavaConverters–只需要几个额外的跳转来跳过:我们可以证明这样做从ScalaREPL:但是,您当然可以从Java代码轻松地调用这些方法.

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部