GC
K.Sun
这个作者很懒,什么都没留下…
展开
-
Java中的垃圾回收
原文地址:Garbage Collection in Java在C/C++中,如果一个对象不再适用了,那么码农有义务去删除动态分配的对象。在Java中,码农就不需要关心这些不再适用的对象。垃圾回收器会销毁这些对象,但是垃圾回收器不能保证在任何特定的时间都运行。一旦一个对象有了被垃圾回收的资格,那垃圾回收器在任何时间都可以运行。finalize()方法当垃圾回收器决定这个对象再没有引用的时候,那么针对翻译 2016-11-02 21:12:23 · 260 阅读 · 0 评论 -
垃圾回收算法之标记-整理算法
标记-清除算法会使内存产生碎片,那么如何解决这个问题,很显然,清除以后再整理一下内存不就行了么。然而标记-整理算法不是简单滴整理一下内存。标记-整理(Mark-Compact)算法不直接对可回收对象进行清理,而是让所有可用的对象都向一端移动。然后直接清理掉边界意外的内存。很显然,整理这一下需要时间,所以与标记清除算法相比,这一步花费了不少时间,但从长远来看,这一步还是很有必要的。该算法可谓“道德高尚原创 2016-11-01 22:16:02 · 5255 阅读 · 0 评论 -
垃圾回收算法之标记-清除算法
标记-清除(Mark-Sweep)算法顾名思义,主要就是两个动作,一个是标记,另一个就是清除。标记就是根据特定的算法(如:引用计数算法,可达性分析算法等)标出内存中哪些对象可以回收,哪些对象还要继续用。标记指示回收,那就直接收掉;标记指示对象还能用,那就原地不动留下。缺点标记与清除效率低;清除之后内存会产生大量碎片;原创 2016-11-01 21:25:30 · 2081 阅读 · 0 评论 -
垃圾回收算法之分代回收算法
当前商业虚拟机基本上都是采用分代垃圾回收算法来回收垃圾,思想也很简单,就是根据对象的生命周期将内存划分,然后进行分区管理。在Java虚拟机分代垃圾回收机制中,应用程序可用的堆空间可以分为年轻代与老年代,然后呢,年亲代有被分为Eden区,From区与To区。当系统创建一个对象的时候,总是在Eden区操作,当这个区满了,那么就会触发一次YoungGC,也就是年轻代的垃圾回收。一般来说这时候不是所有的对象原创 2016-11-01 20:23:11 · 8819 阅读 · 7 评论 -
垃圾回收算法之复制算法
复制(Copying)算法说到底也是为了解决标记-清除算法产生的那些碎片。首先将内存分为大小相等的两部分(假设A、B两部分),每次呢只使用其中的一部分(这里我们假设为A区),等这部分用完了,这时候就将这里面还能活下来的对象复制到另一部分内存(这里设为B区)中,然后把A区中的剩下部分全部清理掉。这样一来每次清理都要对一半的内存进行回收操作,这样内存碎片的问题就解决了,可以说简单,高效。但是呢,肯定发现原创 2016-11-01 22:50:10 · 7027 阅读 · 6 评论