Spring DI预先实例化xml文件中配置的所有对象。我担心所有对象都是预先创建的并且在堆内存中存在很长时间。 Spring DI会产生内存问题吗?如果不是,那么Spring中的问题是如何解决的?
答案 0 :(得分:1)
Spring没有任何内容可以使你的代码更容易出现内存泄漏或内存消耗增加。
Spring配置只是一种说法的说法:
MyDependency dep = new MyDependency();
MyClass myClass = new MyClass();
myClass.setDependency(dep);
无论如何,你会自己做。
Spring保留对单例范围bean的引用,这些bean在应用程序上下文时将被垃圾收集。但如果你有足够的这些导致问题,你可能有更大的问题。同时,Spring不会保留对它管理的原型bean的引用。
全球的项目近十年来一直在广泛使用Spring。难道你不认为现在已经知道并解决了任何记忆问题吗?
答案 1 :(得分:0)
表示Spring bean的对象通常在应用程序上下文的持续时间内存在,这通常会在整个应用程序的生命周期中存在。
因此,Spring bean不应该通过例如保持对传递给Spring bean的所有对象的引用而变得很重。然而,这是使用Spring的应用程序开发人员的责任。由于你通常枚举所有的Spring bean,通常,自己的Spring bean不应该在堆中占用太多的内存。但总的来说,你是对的。编写糟糕的bean会导致Java应用程序中的内存泄漏,但任何编写错误的代码都可以。