当前位置: 首页 > 知识库问答 >
问题:

垃圾收集器vs IOC

鄢选
2023-03-14

今天我参加了面试我是一个新手到java,Spring启动。面试官问了关于垃圾收集器的问题。我说垃圾收集器将释放未使用的资源。然后他问了关于IOC容器,我说它采取了对象创建的控制权,并将注入到依赖bean。然后他问为什么我们需要使用一个IOC容器我说它不会创建一个新对象每次它将使用一个现有的。再次他问好吧创建一个新对象的问题是什么,因为垃圾收集器将释放内存那么为什么我们应该去IOC...?我被困在这里。请帮助更好地理解这一点

共有1个答案

易宣
2023-03-14

简而言之,你并不总是想要新对象,因为它们可能非常昂贵/创建速度很慢。

IOC容器允许组件放弃对依赖项的创建和管理方式的控制。

例如:如果我以传统方式创建DAO层/类,我的DAO层需要知道如何创建数据源。这是可以管理的,但是想象一下,现在有更多的类需要知道如何创建数据源。

使用IOC,你会说:嘿!我需要一个datasource的实例。现在,由IOC容器为您找到并提供一个。您仍然需要向IOC提供一种为您创建此实例的方法。但在这种情况下,所有DAO层都可以保持内聚性,只做他们应该做的事情——执行事务。这还将允许您创建负责以特定方式处理数据库连接的专家类/组件。

在Spring,默认情况下,所有html" target="_blank">bean都是单态的。这意味着在Spring上下文中只有一个实例。你不需要多次创建它们。

国际奥委会的目的并不是为了缓解GC的功能。这就是放弃组件和依赖项的创建方式。

 类似资料:
  • Java 15 使 ZGC、Z 垃圾收集器成为标准功能。它是 Java 15 之前的一个实验性功能。它是低延迟、高度可扩展的垃圾收集器。 ZGC 是在 Java 11 中作为一项实验性功能引入的,因为开发人员社区认为它太大而无法提前发布。 即使在机器学习应用程序等海量数据应用程序的情况下,ZGC 也具有高性能和高效工作。它确保在处理数据时不会因垃圾收集而长时间停顿。它支持 Linux、Window

  • Java 15 使 ZGC、Z 垃圾收集器成为标准功能。它是 Java 15 之前的一个实验性功能。它是低延迟、高度可扩展的垃圾收集器。 ZGC 是在 Java 11 中作为一项实验性功能引入的,因为开发人员社区认为它太大而无法提前发布。从那时起,对这个垃圾收集做了很多改进,例如 - 并发类卸载 取消提交未使用的内存 支持班级数据共享 NUMA 多线程堆Pre-touch 最大堆大小限制从 4 T

  • Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner

  • 问题内容: 我从带有node.js的线程垃圾收集中学到了node.js使用世代GC。 我通常使用循环对象引用(最终我都会删除/确保超出范围),并想知道node.js是否能很好地处理它们。所以例如。如果使用参考完成。计数,会有一个问题,所以我想知道这个节点有多好。 一些使用场景: 对于每个http请求,我创建一个带有lambda的setTimeout,该lambda可能引用了范围对象。作用域对象还引

  • 来自MSDN:“当一个对象不可访问时,垃圾收集器会将该对象视为垃圾。然后,当垃圾收集器将一个对象的条目从终结队列移动到freachable队列时,该对象不再被视为垃圾,其内存也不会被回收。此时,垃圾收集器已完成对垃圾的识别。一些被识别为垃圾的对象已被重新分类。”被归类为非垃圾。垃圾收集器压缩可回收内存,特殊运行时线程清空可回收队列,执行每个对象的Finalize方法。需要两个GC来回收需要终结的对

  • 由于ElasticSearch是基于Java语言的应用,所以它必须运行在Java虚拟机上。任何Java程序都被编译成字节码,然后才能运行在JVM上。用最常规的方式思考,可以想象JVM只是执行其它的程序,并且控制程序的行为。但是除非你是在为ElasticSearch开发新的插件(这部分的内容将在第9章 开发ElasticSearch插件中论述),否则这不是你关注的重点。你需要关注的重点是垃圾收集器,