Java垃圾回收机制之信息搜集(一)

1 通过课本《JAVA从入门到精通》得到的(P147)
1) 每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收;
2)何种对象会被java虚拟机视为垃圾?
第一是对象引用超过其作用范围,这个对象将被视为垃圾;第二是将对象赋值为null
3)虽然垃圾回收机制已经很完善,但是垃圾回收器智能回收那些由new操作符创建的对象,如果某些对象不是通过new操作符在内存中获取一块内存区域,则可能不被垃圾回收机制所识别。
4)如果用户在类中定义了finalize()方法,在垃圾回收时会首先调用该方法,在下一次垃圾回收动作发生时,才能真正回收被对象占用的内存
5)垃圾回收或finalize()方法不保证一定会发生,如java虚拟机内存损耗殆尽时,它不会执行垃圾回收(下一个点:java虚拟机的基本原理)
6)由于垃圾回收不受人为控制,具体执行时间也不确定,所以finalize()方法也就无法执行。为此,java提供了System.gc()方法强制启动垃圾回收器,这与打120叫救护车道理一样。

2 http://www.importnew.com/19085.html
1) 引用计数法:java是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行,因此考虑通过引用计数来判断一个对象是否可以被回收。如果一个对象没有任何引用与之关联,则说明该对象基本不大可能在其他地方被使用到,那么这个对象就成为可被回收的对象。
存在的不足是由于object1和object2互相引用对方,导致它们的引用计数都不为0,那么垃圾收集器就永远不会回收它们
2) 可达性分析法:基本思想是通过一系列的”GC Roots”对象作为起点进行搜索,如果在“GC Root”和一个对象之间没有可达路径,则称该对象是不可达的。被判定为不可达的对象要称为可回收对象必须至少经历两次标记过程
3) 上面讲的是确定垃圾回收对象,接下来将的是典型的垃圾收集算法
4) 由于java虚拟机规范并没有对如何实现垃圾收集器做出明确的规定,因此各个厂商的虚拟机可采用不同的方式来实现垃圾收集器
5) Mark-Sweep方法:标记阶段的任务是标记处所有需要被回收的对象,清除阶段是回收被标记的对象所占用的空间。存在的问题是容易产生内存碎片,太多可能会导致后续过程中需要为大对象分分配空间时无法找到足够的空间而提前触发新的一次垃圾收集动作
6)Copying算法:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用的内存空间一次清理掉,这样一来就不容易出现内存碎片的问题。
缺点是对内存空间的使用付出了高昂的代价,能够使用的内存缩减到原来的一半。
7)Mark-Compact(标记整理算法)
在标记阶段时,与标记清理方法一样,但是在完成标记之后,不是直接清理可回收对象,二是将存活对象都向一端移动,然后清理掉端边界以外的内存
8)Generational Collection分代收集算法
核心思想是根据对象存活的生命周期将内存或分为若干个不同的区域。一般情况下将堆区划分为老年代和新生代,老年代的特点是每次垃圾收集时只有少量对象需要被回收,而新生代的特点是每次垃圾回收都有大量的对象需要被回收-根据不同代的特点采取最合适的收集算法。
针对于新生代,采取Copying算法,因为新生代中每次垃圾回收都要回收大部分对象,也就是说需要复制的操作次数较少;将新生代划分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden空间和其中的一块Survivor空间,当进行回收时,将Eden和Survivor中还存活的对象复制到另一块Survivor空间中,然后清理掉Eden和刚才使用过的Survivor空间。
老年代:每次回收少量对象,一般使用的是Mark-Compact算法
堆之外还有一个代是永久代(Permanet Generation),它用来存储class类,常量,方法描述等。对永久代的回收主要回收两部分内容:废弃常量和无用的类。
9)一般来说,大对象会被直接分配到老年代,所谓的大对象是指需要大量连续存储空间的对象,最常见的一种大对象就是大数组
3 http://blog.csdn.net/plgy_Y/article/details/72791483
这篇博客类似于上面的文章,但是其中的图片更加清晰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值