Go和JAVA垃圾回收机制有啥区别

题目来源:好未来

答案1:

  1. JAVA
    java语言中选择了可达性分析进行对象存活判断,而不是引用计数,主要也是因为java中软引用、弱引用、虚引用等多种引用方式使用引用计数并不能进行有效的存活判断,同时为了避免循环引用的问题,所以java选择了可达性分析的方式进行对象存活判断。
    目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代,Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收,年老代主要使用标记-整理垃圾回收算法
  • 在java中触发垃圾回收的条件是:
    cpu空闲的时候;
    在堆栈满了的时候;
    主动调用 System.gc() 后尝试进行回收;
  1. GO
    GO的GC详见前面的88等。

  2. 总结
    Go的gc最佳应用场景是自身的分配行为不容易导致碎片堆积,并且程序分配新对象的速度不太高的情况,这种情况下go的垃圾回收比java更高效。相反的,当对象分配速度高时,java的gc的优势就会明显体现。