java对象内存的回收

lwm1368 发布于 2014/07/05 11:06
阅读 184
收藏 0

Hi all

    在创建一个对象后,如果该对象没有被指向、引用,就会被java虚拟机当作垃圾回收。

但是如果我在创建该对象时,将其添加到静态的Vector中,应该就不会被当做垃圾回收了吧?是不是要知道在Vector中删除才会被当做垃圾回收呢?

public class mtl{

public static void main(String[] args) {
// TODO Auto-generated method stub
mtlmt = new mtl();
mt.test();//
mt.test();
}

//创建新的对象
public void test()
{
Bighead bh = new Bighead();
}
}

class Bighead
{
    public static Vector<Bighead> HeadList = new Vector<Bighead>();
    public Bighead()
    {
    Bighead.HeadList.add(this);
    }
}

加载中
0
我类个擦

java中的内存java虚拟机自己去管理的,java的内存分配分为两个部分,一个是数据堆,一个是栈。
 堆是给开发人员用的,是在JVM启动时创建,程序在运行的时候一般分配数据堆,把局部的临时的变量都放进去,生命周期和进程有关系,在堆中分配的内存由java虚拟机的自动垃圾回收器来管理,堆内存用来存放由new创建的对象和数组。

 

 栈是留给JVM自己用的,用来存放类的信息的,它和堆不同,运行期内GC不会释放空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间:
如果程序声明了static的变量,就直接在栈中运行的,进程销毁了,不一定会销毁static变量。所以gc的时候,你放在static中的object是被引用的,不会被gc

0
Timco
Timco
最准确的答案——是的。
返回顶部
顶部