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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹奎 中级黑马   /  2013-7-30 18:32  /  1277 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹奎 于 2013-8-7 18:54 编辑

java垃圾回收机制的工作原理,什么数据是要被回收的?什么数据是不被回收的?jvm怎么知道什么该回收什么不该回收!

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

6 个回复

倒序浏览
垃圾回收机制的实质是:后台有一个低线程,它在不断的扫描堆,如果它发现堆中的某块区域没有栈中的指针指向它,就会将其当做垃圾处理,回收掉.
回复 使用道具 举报
当程序创建对象、数组等引用类型的实体时,系统都会在堆内存中分配一块内存区,对象就保存在这块内存区中,当这块内存不再被任何引用变量引用时,这块内存就变成垃圾,等待垃圾回收机制回收。
一般只回收内存中的  不回收物理资源。
回复 使用道具 举报
java的回收机制会将堆中的丢弃的数据自动回收,清理堆空间
回复 使用道具 举报
本帖最后由 封号了... 于 2013-8-7 18:38 编辑

Java中是以面向对象的方式来思考问题解决问题的,所以我们最经常做的就是new一个对象,这个存放在堆内存中的对象相对而言是比较占用内存的,
所以当我们不再使用这个对象的时候,就会让所有指向它的引用指向null,让JVM的垃圾回收器来发现、回收(并不是对象被抛弃后当即被回收的。
JVM进程做空间回收有较大的系统开销。如果每当某应用进程丢弃一个对象,就立即回收它的空间,势必会使整个系统的运转效率非常低下)。
我们也可以人为的用System.gc();来建议JVM进行垃圾回收,JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,
使垃圾回收操作容易发生,或提早发生,或回收较多而已。 Java的垃圾回收机制是为所有Java应用进程服务的,而不是为某个特定的进程服务的。
因此,任何一个进程都不能命令Java垃圾回收机制做什么、怎么做或做多少。
回复 使用道具 举报
C是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
垃圾回收的优点和原理。并考虑2种回收机制。
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马