我用java创建了一个类,如何回收这个类??不要让它占用内存,是否需要像c语言一样在代码中加入回收函数
4个回答
展开全部
纠正下你的说法.一个类是不会无缘无故运行的,所以谈不上占用内存,更没有回收.你问的应该是使用一个类创建了一个对象,如何回收该对象所占的内存空间?
例如有一个Person类,我们创建他的一个对象,一般是如下:
Person mPerson = new Person();
这个时候情况是,在栈内存中标记了一个名字叫mPerson的空间,它存储了一个关于某块内存区域位置的信息,说白了,就是你使用new Person();创建出来的对象的位置,我们称mPerson为Person对象的一个引用。这个对象位于堆内存,它是有默认值的,必须占内存一部分空间,想使用的时候,可以通过mPerson找到它。当你把mPerson赋值为null后,你那个对象就没有引用了,这个时候,你的JVM会在适当的时候自动去回收掉Person的对象。
不知道说明白了没有。
例如有一个Person类,我们创建他的一个对象,一般是如下:
Person mPerson = new Person();
这个时候情况是,在栈内存中标记了一个名字叫mPerson的空间,它存储了一个关于某块内存区域位置的信息,说白了,就是你使用new Person();创建出来的对象的位置,我们称mPerson为Person对象的一个引用。这个对象位于堆内存,它是有默认值的,必须占内存一部分空间,想使用的时候,可以通过mPerson找到它。当你把mPerson赋值为null后,你那个对象就没有引用了,这个时候,你的JVM会在适当的时候自动去回收掉Person的对象。
不知道说明白了没有。
追问
你说的我都理解,但是c语言中要用free()来释放被定义的指针,好像下面的
int* a = malloc(100); free(a)
因此我就想知道java里,是否也要用相关的函数来释放指定了的内存。或是java能自动清理指定的内存
追答
会自动清理没有引用的对象所占据的内存,不需要用户调用.即时调用了,也不一定会立刻释放.
Java中垃圾回收,代码很简单:System.gc();
不一定立刻回收
2013-03-19
展开全部
单独的一个 Java 类,如果你不引用它创建它的对象,它是不占用内存的,不用回收
而且 Java 内存的回收是交给 gc 去处理的,不需要手动的去调用
有一个可以注意的地方就是,不需要实例化数据的地方,尽量不要去实例化
不再使用的对象,可以赋值为 null ,可以 加快 gc 的回收
如:
List a = new ArrayList();
....
a = null; // 如果a不使用了,可以赋值为null,这样可以被加速引用
使用 System.gc() 是调用 垃圾回收的方法的,但并不一定会被马上执行,还是根据JVM当前的运行状态去处理
需要深入理解的话,你可以看一下 JVM 的内存分配机制
而且 Java 内存的回收是交给 gc 去处理的,不需要手动的去调用
有一个可以注意的地方就是,不需要实例化数据的地方,尽量不要去实例化
不再使用的对象,可以赋值为 null ,可以 加快 gc 的回收
如:
List a = new ArrayList();
....
a = null; // 如果a不使用了,可以赋值为null,这样可以被加速引用
使用 System.gc() 是调用 垃圾回收的方法的,但并不一定会被马上执行,还是根据JVM当前的运行状态去处理
需要深入理解的话,你可以看一下 JVM 的内存分配机制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
System.gc() 可以通知JVM进行垃圾回收。但是不一定立马回收。Java是自己内部回收的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java自动处理!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询