A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© It's_Zero 中级黑马   /  2012-5-9 15:51  /  4997 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对象创建之后是何时被回收的呢?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

12 个回复

倒序浏览
当没有任何引用指向该对象时,该对象被称为垃圾。由垃圾回收机制不定期对其进行回收。
需要说明的是:垃圾回收机制由虚拟机自主控制,不受程序代码影响。即使在程序中有System.gc();的代码,也不一定会立即调用垃圾回收功能,只在JVM认为需要进行清理的时候才会对内存中的垃圾对象进行回收。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在java中, java虚拟机有自己的垃圾回收站机制,它和java代码互不影响,就是两个线程一样。
如果当一个对象,没有任何指向时,这时,就算是垃圾了。那么,java在运行时,就会自动清理掉这样的垃圾,而减缓内存的负担。
回复 使用道具 举报
综上所述:
1、对象的回收是由JVM负责的。
2、对象的回收是由JVM在不确定的时间执行
3、对象回收的前提是这个对象实例再也没被调用,成了没人要的孩子的时候
4、.......
回复 使用道具 举报
综上所述:
1、对象的回收是由JVM负责的。
2、对象的回收是由JVM在不确定的时间执行
3、对象回收的前提是这个对象实例再也没被调用,成了没人要的孩子的时候
4、.......
回复 使用道具 举报
对象在被创建后有两种回收的可能 一种是在程序运行中长时间不去用那个对象 在Java虚拟机空闲时回去回收那个对象还有一种就是类被注销了 对象也就不存在了
回复 使用道具 举报
当没有任何引用变量指向该对象时,JVM便认为该对象是垃圾,会随机调用垃圾回收站回收该对象。看下面的图就清楚了:

dx.jpg (630.35 KB, 下载次数: 44)

dx.jpg
回复 使用道具 举报
没用的时候,没有任何引用指向的时候
回复 使用道具 举报
当该对象没有谁在使用它时,jvm自动清理之,JVM独立工作、自己干活,不和咱写的代码牵扯。晚安
回复 使用道具 举报
当Java虚拟机启动时,会从底层操作系统取得一块内存,并以此区段来执行Java程序。
对象的生存空间堆heap存放所有的对象,方法调用及变量的生存空间stack存放方法调用和局部变量
public class TestLifeOne{
        public void read(){
                int s = 42;  //s的范围只限与read()里面,别处无法使用
                sleep();
        }
        public void sleep(){
                s = 7; //sleep()无法存取s变量,因为它不在sleep()的堆栈快中
        }
}
对象只要有引用,如果某个对象的引用已经不在它的范围中,但此引用还在,则此对象就会继续保留在堆上。如果对对象的唯一引用消失时,对象就会从堆中释放,引用变量会跟堆栈快一起解散。
有3种方法可以释放对象的引用:
引用永久性的离开它的范围:
void go(){
        Life z = new Life(); //z会在方法结束时消失
}
引用被赋值到其他的对象上:
Life z = new Life();
z = new Life();        //第一个对象会在z被赋值到别处是消失
直接将引用设定为null:
Life z = new Life();
z = null;

回复 使用道具 举报
回收机制就是 当一些资源被创建使用之后或不在调用的话 就会变成垃圾,垃圾的话会占用空间,这时候就需要释放空间给其他程序使用,所以JAVA拥有自动垃圾回收机制,会在适当的时候自动调用垃圾回收 释放资源,程序员也可以手动调用释放资源等等。
如:
public class A  {
String str;
public A(String str){
        this.str=str;
}
        public String toString(){
                return str;
        }
        @Override
        protected void finalize() throws Throwable {
                System.out.println("我是"+str+".我被回收了..");
        }
        public static void main(String[] args) {
                A a=new A("红牛帮老大");
                a=null;
                System.gc();   //运行结果 我是红牛帮老大.我被回收了..
        }
}
回复 使用道具 举报
没有对象指向它  等待垃圾回收机制处理
回复 使用道具 举报
对象创建之后,如果还在被使用当中,它是不会被回收的,因为它还不是垃圾;
当对象不再被使用的时候,就会变成垃圾,java虚拟机将根据垃圾自动收集机制回收垃圾。
至于,何时回收,这个java没有严格的规定时间。最多只能建议虚拟机尽快回收垃圾。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马