Java和.NET中的垃圾回收机制比较

相同点:

在楚雄州等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站设计 网站设计制作按需开发,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站建设,外贸网站制作,楚雄州网站建设费用合理。

都采用了分代的机制。

都支持并发GC。

都没有采用引用计数方式,而是采用了追踪技术。

.NET中,可以通过代码GC.Collect() 强制要求CLR进行垃圾回收(由于垃圾回收是异步的,CLR有一个专用的线程负责垃圾回收,因此,即使调用GC.Collect,也并不是实时的调用了Finalize,因此要保证确实调用了析构方法,可以使用语句GC.WaitForPendingFinalizers()来确保析构方法真的被运行了,参考http://cnn237111.blog.51cto.com/2359144/1343004)

Java中也可以通过System.gc() 强制要求进行垃圾回收。(事实上也仅仅是建议JVM执行垃圾回收,JVM并不一定立即做回收行为。)     
       

不同点:

CLR预留了一块大空间,称作large object heap (LOH),目的是当有大对象(超过85000字节的)需要分配空间时,就可以放在这里。

这块地方和分代机制的不同之处在于,这个地方只有当发生full GC的时候,才会回收,而且这块地方不会被压缩。

Java中可以通过配置参数,使得大对象(大于设定的阈值)直接进入老年代(避免在年轻代上做大量的复制操作)。

JVM回收的内存的,仅仅在某些条件下才返回给操作系统。(详见:http://stackoverflow.com/questions/366658/java-6-excessive-memory-usage#367933)

.NET回收的内存,直接给返还给操作系统。

JVM在的垃圾回收机制,提供了大量的可配置参数。

而CLR的垃圾回收机制几乎没什么可以配置的(仅有的配置似乎就是工作站模式(Workstation)和服务器模式(Server))。

都支持并发GC。JAVA是在老年代上支持并发GC,采用的CMS收集器。

.NET的并发GC只在第2代上,并且在工作站模式下才会有。    

      

Java分成年轻代,老年代,永久代。

.NET分第0代,第1代,第2代。

.NET中采用了标记,压缩的方式。

JAVA由于收集器很多,因此不限于一种算法。

             

年轻代

老年代

方式

Serial收集器

复制算法

             

单线程,stop the world

SerialOld收集器                  

             

标记整理算法

单线程,stop the world                  

ParNew收集器

复制算法

标记整理算法

多线程,stop the world

Parallel Scavenge收集器

复制算法                
           
多线程,stop the world               

CMS收集器

             

标记清除

单线程

G1收集器

复制

标记整理

             

   

Java垃圾回收的几篇文章

http://www.cnblogs.com/shudonghe/p/3457990.html

http://blog.csdn.net/zhangerqing/article/details/8214365

.NET垃圾回收的几篇文章

https://msdn.microsoft.com/zh-cn/library/ee787088(v=vs.110).aspx

http://www.mincoder.com/article/4284.shtml

网页标题:Java和.NET中的垃圾回收机制比较
网页链接:https://www.cdcxhl.com/article12/jioidc.html

成都网站建设公司_创新互联,为您提供外贸建站网站改版面包屑导航商城网站网站维护标签优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

商城网站建设