网上查了很多资料,说了一堆算法,标记清除,标记整理,我想问一下,现在的JVM的垃圾回收用的是什么算法?难道是不同情况用的不同算法?

解决方案 »

  1.   

    据我所知, 不同厂商的JDK GC机制是不同的。比如sun的和ibm的就截然不同, 并且ibm的jdk在不同情况下有不同的策略, 用户可以根据需要选择。http://www.360doc.com/content/10/0706/15/1238465_37240965.shtml
      

  2.   

    是的 不同厂商的jvm的回收算法是不一样的!
      

  3.   

    jvm规范中只是说了虚拟机需要对内存进行管理,并没有规定一定要垃圾回收,理论上内存满的时候简单抛出一个异常也是符合规范的,只是每个jvm的实现的不同,常见的有
    1.复制的算法,简单的说就是把内存分成两个相同的部分(比如A,B),根据一定的规则(新生代对象、老对象)将不需要回收的对象复制到另一部分(A -> B),然后一次性回收A。这种方法的缺陷是需要的内存比较大。2.标记的算法,就是在一次遍历的时候把需要回收的对象标记一下,然后再回收这些有标记的对象。这种方法改进了第一种的不足,不过容易产生内存碎片。3.综合的方法,就是对上面的两种方法进行了综合,具体我也不记得了,去看看jvm规范,上面比较清楚的。
      

  4.   

    当对象在jvm运行空间中无法通过根集合到达时,这个对象就称为垃圾对象。根集合时有类中的静态引用域或与本地引用预组成的。