【发布时间】:2020-09-14 15:33:48
【问题描述】:
如here所说,我应该关闭从工厂获得的资源解析器。
在资源解析器不再使用时调用 close() 方法非常重要,以确保正确清理任何系统资源。
但我不明白为什么要这样做,因为为什么 java 垃圾收集框架不会自动释放内存? 我知道一个对象如果有引用就不会被垃圾收集。 让我们举个例子:
public class MyServiceImpl{
@Reference
ResourceResolverFactory rrf;
public void someFunction(){
ResourceResolver resourceResolver = rrf.getServiceResourceResolver(Map object);
resourceResolver.getResource(path);
}
}
在上面这段代码中,resourceResolver 对象只是用来获取资源的。并且在函数执行结束后,resourceResolver 对象不再存在引用。所以我不明白为什么java垃圾收集器不能释放内存?它仍然具有什么参考价值?
我能想到的一个原因,因为我知道 ResourceResolverFactory 类提供了 Singleton 对象,并且在 Singleton 类的情况下,该对象在程序结束之前没有资格进行垃圾收集,在此期间如果我们创建数千个 ResourceResolver 对象然后内存在程序结束之前不会释放。这是一个正当的理由吗? Singleton ResourceResolverFactory 和 ResourceResolver 对象之间是否有内存映射?
【问题讨论】:
-
垃圾收集器负责处理内存。而且只有记忆。不是资源。
标签: java garbage-collection aem sling