【问题标题】:Spring/Camel Garbage Collection with Dependency Injections使用依赖注入的 Spring/Camel 垃圾收集
【发布时间】:2011-08-19 13:55:12
【问题描述】:

我已经配置了一个 Spring 应用程序(使用 Camel 与 ActiveMQ 代理集成),这样两个特定的类,例如,PersonPersonality,通过 Spring 自动连接并注入它们的所有依赖项容器。对于本示例,Person 对象 具有 Personality 对象作为成员/属性。所以 Spring 配置文件连接了 Personality 实例,并且这些 bean 在连接的 People bean 中被引用:

<bean id="personality" class="com.me.someProgram.Personality" singleton="false">
    <!-- blah... -->
</bean>

<bean id="person" class="com.me.someProgram.Person" singleton="false">
    <!-- People have Personalities -->
    <property name="personality" ref="personality"/>
    <!-- blah... -->
</bean>

两个 bean 在范围内都被指定为 prototypes,因为这对我的应用程序有意义。基本上,每次我得到一个新的Person 时,我都需要获取一个新的Personality 实例。

我的问题:

这是我第一个使用 Spring 和 IoC/依赖注入的应用程序。我担心垃圾收集和内存泄漏。当 bean 是原型,并且原型嵌套在原型中时(通过 has-a 关系),您是否需要担心 GC/内存泄漏?或者 Spring 容器是否为您减轻了所有这些担忧?是否有关于 Spring/IoC 内存管理的最佳实践?有什么要避开的反模式?

我的实际业务对象非常大,而且我会产生很多,所以如果我开始走上一条充满糟糕内存管理的道路,那将是一段非常非常坎坷的旅程。

谢谢!

【问题讨论】:

    标签: spring memory-management dependency-injection garbage-collection


    【解决方案1】:

    以上代码中不会出现spring引起的垃圾回收问题。您可以将上面的 spring 配置视为另一种说法,

    Personality personality = new Personality();
    Person person = new Person();
    person.setPersonality(person);
    

    Spring 不维护对其创建的原型 bean 的引用,因此 Spring 本身不会导致内存泄漏。

    Spring 确实维护了对单例范围 bean 的引用,并且在包含的应用程序上下文存在之前,这些 bean 不会被 gc'd。

    【讨论】:

      猜你喜欢
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多