关于java内存释放的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 18:16:32
有个Map是如下定义的
public class AjaxAction extends Action {
public HashMap map= new HashMap();

}
请问但AjaxAction这个类被自动回收后,这个public的map所占用的内存是否被释放。
这不是一个简单的问题,请仔细考虑。
我是怀疑这个map还在占用内存。

我想你说的应该是AjaxAction对象被回收吧
要清楚这个问题必须了解对象的结构
java虚拟机对类实例的引用(即对象)是指向一个句柄的指针,这个句柄自身是一对指针,包含该对象的方法和代表该对象类型的class对象的指针的表,另一个指向在java堆中为该对象数据分配的存储器;
很明显,map对象的句柄是保存在AjaxAction对象分配的存储器中
所以当AjaxAction这个句柄没有被任何引用引用时,被GC回收,其分配的数据存储器也回收,即map对象这个句柄也被回收,map指向的内存没有任何引用指向,同样要被回收

那你就调用个java 的自带方法清理不就好了么,类似C#中的dispose()方法的,java 中不知道是不是dispose(),你可以查看下其他的资料,然后自己手动在你需要释放资源的地方调用清理。~~

路过~

可能被释放,也可能不被释放,要看程序由根顶点运行是否可能到达这个对象,如果可能,便被认为是有效对象不被释放。如果不能达到,便被认为不再被引用会gc自动释放回收。如果对象是可达的,但对象是无用的,即程序以后不会再使用这些对象,gc不会自动回收,被认为是内存泄漏。
有很多种情况

JAVA的你不用管。。。。不见得会立即释放。。。因为垃圾清理是在虚拟机关闭或者虚拟机内存耗尽才进行的动作

既然类都被回收了,其成员变量也一定被回收了!毫无疑问