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

本文阅读 2 分钟
首页 golang 正文

题目序号:977

题目来源:好未来

频次:1

答案1:(peace)

1) JAVA
java语言中选择了可达性分析进行对象存活判断,而不是引用计数,主要也是因为java中软引用、弱引用、虚引用等多种引用方式使用引用计数并不能进行有效的存活判断,同时为了避免循环引用的问题,所以java选择了可达性分析的方式进行对象存活判断。
目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代,Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收,年老代主要使用标记-整理垃圾回收算法

  • 在java中触发垃圾回收的条件是:
    cpu空闲的时候;
    在堆栈满了的时候;
    主动调用 System.gc() 后尝试进行回收;

2) GO
GO的GC详见前面的88等。

  1. 总结
    Go的gc最佳应用场景是自身的分配行为不容易导致碎片堆积,并且程序分配新对象的速度不太高的情况,这种情况下go的垃圾回收比java更高效。相反的,当对象分配速度高时,java的gc的优势就会明显体现。
本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论