垃圾回收技术

    从Java发布最早的版本开始,一直都保留的核心特点就是垃圾回收。垃圾回收使我们不再需要手动管理内存。当使用完一个对象后,我们只需要删除他的应用,好,垃圾回收就会自动释放它。垃圾回收为程序员减少了分配,释放内存空间等繁琐步骤。

    尽管垃圾回收达成了无需手动管理内存的目标,也防止了传统的内存泄漏。但是作为代价,但是有时垃圾回收相当笨拙。不同的jvm,垃圾回收策略也有所不同。垃圾回收的最大的敌人就是传说中的主要(major)或(full)垃圾回收。除了Azul JVM,所有的JVM都存在这个的问题。

   当垃圾回收运行时,他会运行一项可达性测试,他会创建一个由对象组成的跟集合(root set),该集合包含每个运行线程中的直接可见的对象。接着,他会探寻跟集合中对象涉及的其他对象,然后探寻这些对象涉及的对象,直到所有的对象都被涉及。在这个过程中,他会记录下现时活动对象的内存地址。然后把不被使用的地址都扫除。恰当的说,他会把没有跟集合对象引用的内存都释放。最终,他会压缩,整理这些内存,这样新的对象才能获得内存分配。

原文地址:https://www.cnblogs.com/cuixiaomeng/p/10531738.html