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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩军博 黑马帝   /  2011-12-13 13:54  /  3174 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩军博 于 2011-12-14 10:35 编辑

毕老师讲的垃圾回收那块我没听明白,谁能给我更为通俗的讲解。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

8 个回复

倒序浏览
Java的垃圾回收机制就是在空闲时间以不定时的方式动态回收没有任何引用的对象占据的内存空间。
它是Java虚拟机提供的能力.
回复 使用道具 举报
周胜 黑马帝 2011-12-13 14:13:54
藤椅
垃圾收集能自动释放内存空间,减轻编程的负担。这使Java 虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的存储器问题。在用Java语言编程的时候,靠垃圾收集机制可大大缩短时间。
回复 使用道具 举报
t_mac 黑马帝 2011-12-13 14:19:35
板凳
垃圾回收机制是值jvm用于释放那些不再使用的对象所占用的内存,gc通过确定对象是否被对象引用来确定是否收集该对象,gc首先要判断该对象是否是时候可以收集,常用的方法是引用技术和对象引用遍历。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
垃圾回收 简称 GC
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
像在C++中,那些引用类型都需要手动的进行置为null,将其之前指向的对象变为垃圾,而在Java中,有垃圾回收机制,就不需要我们那样操作了,它会自动的回收那些变成垃圾的对象,释放内存空间,
[个人理解]
回复 使用道具 举报
刘志祥 黑马帝 2011-12-13 14:41:57
7#
垃圾回收机制:GC(Games Convention) 或 (Garbage Collection)。
有了GC,程序员就不需要再手动的去控制内存的释放。当Java虚拟机(VM)发觉内存资源紧张的时候,就会自动地去清理无用对象(没有被引用到的对象)所占用的内存空间。如果需要,可以在程序中显式地使用System.gc() / System.GC.Collect()来强制进行一次立即的内存清理。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
王青山 黑马帝 2011-12-13 16:05:47
8#
JAVA垃圾回收机制:
在VB、C++等某些程序设计语言中,无论是对象还是动态配置的资源或内存,都必须由程序员自行声明产生和回收,否则其中的资源将不断消耗,造成资源的浪费甚至死机。由于要预先确定占用的内存空间是否应该被回收是非常困难的,这就导致手工回收内存往往是一项复杂而艰巨的工作。因此,当使用这些程序设计语言编程时,程序员不仅要考虑如何实现算法以满足应用,还要花费许多精力考虑合理使用内存避免系统崩溃。

针对这种情况,JAVA语言建立了垃圾回收机制。JAVA是纯粹的面向对象的编程语言,其程序以类为单位,程序运行期间会在内存中创建很多类的对象。这些对象在完成任务之后,JAVA的垃圾回收机制会自动释放这些对象所占用的空间,使回收的内存能被再次利用,提高程序的运行效率。垃圾回收不仅可以提高系统的可靠性、使内存管理与类接口设计分离,还可以使开发者减少了跟踪内存管理错误的时间,从而把程序员从手工回收内存空间的繁重工作中解脱出来。

JAVA垃圾回收机制另一个特点是,进行垃圾回收的线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。

___________________________________________________________

垃圾回收能干预吗?

许多人对Java的垃圾回收机制不放心,希望在应用代码里控制JVM的垃圾回收运作。这是不可能的事。对垃圾回收机制来说,应用只有两个途径发消息给JVM。第一个前面就是将指向某对象的所有引用变量全部移走。这就相当于向JVM发了一个消息:这个对象不要了。第二个是调用库方法System.gc(),多数书里说调用它让Java做垃圾回收。


第一个是一个告知,而调用System.gc()也仅仅是一个请求。JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,使垃圾回收操作容易发生,或提早发生,或回收较多而已。


希望JVM及时回收垃圾,是一种需求。其实,还有相反的一种需要:在某段时间内最好不要回收垃圾。要求运行速度最快的实时系统,特别是嵌入式系统,往往希望如此。


Java的垃圾回收机制是为所有Java应用进程服务的,而不是为某个特定的进程服务的。因此,任何一个进程都不能命令Java垃圾回收机制做什么、怎么做或做多少。





评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
垃圾回收器作为一个级别低的线程运行,用来监视new创建的对象,并辨别哪些不会再被引用的对象。然后,释放这些对象的内存空间 给其他的对象使用。
  用什么方法通知虚拟机主用进行垃圾回收:当存放类实列的动态内存不够用时就会进行垃圾收集或者手动用System.gc() 通知虚拟机进行运行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马