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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹昌豪 中级黑马   /  2012-5-21 19:05  /  1583 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java前面有说过垃圾回收机制,当我们创建对象的时候系统会给这个对象分配内存,当对象不再使用的时候,垃圾回收机制会在不定时期回收这个对象。书上有说垃圾回收只负责回收对象,不负责回收物理资源?还有啊!!这个不定时是什么时候呢?

5 个回复

倒序浏览
java垃圾回收就是 系统自动把heap(堆)中没有引用指向的对象定期删除
这个是定期自动调用,一般不用去考虑回收的时间点,另外,如果heap中对象比内存多,这时是会报错的。
JAVA垃圾回收机制另一个特点是,进行垃圾回收的线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。
垃圾回收线程遵循以下两个特性。
1.  自动性。Java技术提供了一个系统级的线程,即垃圾收集器线程,来跟踪每一块分配出去的内存空间,当Java 虚拟机处于空闲循环时,垃圾收集器线程会自动检查每一块分配出去的内存空间,然后自动回收每一块可以回收的无用的内存块。
2.  不可预期性。一个对象成为了垃圾,但是你不能断言,该对象在这行以后就立刻被清除,甚至有可能当程序结束后,该对象仍然占用内存。像Windows这样的软件常常会出现内存不足的情况,JAVA程序很少出现就是因为可以自动回收内存。然而,因为JAVA也不能保证及时地清除无用的对象,所以JAVA程序也会出现内存不足的情况,只是这种情况很少出现。垃圾收集线程在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。
回复 使用道具 举报
当内存占满的时候;
你可以强制清理;
利用System.gc()方法进行强制清理;
回复 使用道具 举报
恩恩,不错哈,谢谢!!可以理解了啊
回复 使用道具 举报
java垃圾回收就是 系统自动把heap(堆)中没有引用指向的对象定期删除
这个是定期自动调用,一般不用去考虑回收的时间点,另外,如果heap中对象比内存多,这时是会报错的。
JAVA垃圾回收机制另一个特点是,进行垃圾回收的线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。
垃圾回收线程遵循以下两个特性。
1.  自动性。Java技术提供了一个系统级的线程,即垃圾收集器线程,来跟踪每一块分配出去的内存空间,当Java 虚拟机处于空闲循环时,垃圾收集器线程会自动检查每一块分配出去的内存空间,然后自动回收每一块可以回收的无用的内存块。
2.  不可预期性。一个对象成为了垃圾,但是你不能断言,该对象在这行以后就立刻被清除,甚至有可能当程序结束后,该对象仍然占用内存。像Windows这样的软件常常会出现内存不足的情况,JAVA程序很少出现就是因为可以自动回收内存。然而,因为JAVA也不能保证及时地清除无用的对象,所以JAVA程序也会出现内存不足的情况,只是这种情况很少出现。垃圾收集线程在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。
回复 使用道具 举报
这答案真标准啊,受教了啊,开始学听到这概念不怎么理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马