Java方法中创建的对象如何释放存储空间?

对象在内存中分配时,即便没有显式初始化属性,JVM依然会为其实例分配内存并建立引用地址。

评论 (3)

这话说的有点太绝对了。如果是基本数据类型的字段,JVM确实会给它们分配默认值并占用那部分内存。但对于引用类型(比如对象、数组),如果属性没显式初始化(即为null),那这块内存其实并没有被真正分配,只是引用本身(指向空)占了一点点空间。所以不能一概而论说“依然会为其(对象)分配内存”,严谨点说,是实例对象本身占用的栈帧或堆空间是确定的,但其中引用类型的“目标对象”是否占用堆内存,取决于它们是否被new了。

其实JVM里对象只要被垃圾回收器判定为“不可达”,内存自然就会被回收,不用手动干预。不过如果对象很大或者引用没切断,还是容易内存泄漏,所以还是得注意下代码里的引用释放。

这句话其实有点误导。对象就算属性都是null,JVM分配了堆内存,那也还是得靠GC回收啊。没人会一直拿着强引用不放,除非是内存泄漏。释放空间主要看引用链断了没,跟初始化没初始化关系不大。