设为首页 加入收藏

TOP

Java和.NET中的垃圾回收机制比较
2017-02-08 08:16:43 】 浏览:7113
Tags:Java .NET 垃圾 回收 机制 比较

Java和.NET中的垃圾回收机制相同点:


都采用了分代的机制。


都支持并发GC。


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


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由于收集器很多,因此不限于一种算法。


.NET垃圾回收的几篇文章
https://msdn.microsoft.com/zh-cn/library/ee787088(v=vs.110).aspx
http://www.mincoder.com/article/4284.shtml


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JVM内存管理及垃圾回收详解 下一篇JNI通过动态注册实现native函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目