问题描述
例如,我们有一个MyClass
实例,它包含1个方法。此方法应保留在内存中。当对MyClass
的此实例进行GC处理时,是否也删除了对该方法的引用?我想弄清楚通过Dependency Injection做所有事情(因此为每个类创建新的实例)需要更少的内存,并且更高效或更简单的Helper
类以及大量的静态方法还是不错的。
解决方法
对象的实例方法存储在其类对象中(应该只存在一个副本),它们不会与每个新实例“复制”,相反,每个实例在内部都包含对驻留在其中的方法实现的引用类对象。 实例是垃圾收集而不是类数据。根据Java版本,类数据将存储在permgen空间或元空间中。 垃圾收集器专门在创建实例的堆上工作,而不是在permgen或元空间上工作。