当我们创建一个类的对象时,对象将转到堆,引用变量将被放入堆栈。
我在这里要问的是,有多少对象创建可能导致OutOfMemory错误,而我们的JVM将耗尽内存。
此外,在Spring中,我们使用依赖注入创建对象,然后IOC容器将创建和管理它们及其生命周期。所以问题是所有对象的存储位置以及IOC容器内存不足的可能性。
有任何限制吗?
答案 0 :(得分:0)
这取决于有多少对象存活时间更长,即某种缓存等。 如果您尝试在内存中加载大型表或文件,则即使堆栈中的对象也可以获得OOM。
如果要阻止OOM,那么您应该知道应用程序的内存使用情况。 使用AppDynamics,Dynatrace或NewRelic等分析器或APM工具查看内存使用模式,或者进行少量堆转储并对其进行分析。
答案 1 :(得分:0)
可以保留的对象数取决于最大堆大小和每个对象的大小。对于典型的4 GB服务器大小,您可以创建数千万个对象。除非您正在加载大量数据,否则极不可能耗尽内存。
答案 2 :(得分:0)
有多少对象创建可能导致OutOfMemory错误和我们的JVM 会耗尽内存吗?
这取决于默认配置的对象数和JVM堆大小,或者使用-Xmx
参数配置。
此外,在Spring中,我们使用依赖注入创建对象然后 IOC容器将创建和管理它们及其生命周期。 所以问题是所有对象都存储在哪里以及它是什么 IOC容器内存不足的可能性?
我们不是使用new
运算符手动为类创建对象,而是赋予IOC容器的职责(以受控方式注入依赖项)。因此,无论我们使用new
运算符还是IOC容器创建对象,都会创建对象,两者都将最终驻留在JVM中。
因此,IOC容器将仅管理JVM中的所有对象,并且所有对象都将存储在堆内存中,内存不足的可能性取决于上面提到的默认值或-XmX。