.net 垃圾回收 工作站与服务器区别

一直以为.net中垃圾回收都是单线程的,原来其实可以并发。 

工作站和服务器垃圾回收比较

以下是工作站垃圾回收的线程处理和性能注意事项:

  • 回收发生在触发垃圾回收的用户线程上,并保留相同优先级。 因为用户线程通常以普通优先级运行,所以垃圾回收器(在普通优先级线程上运行)必须与其他线程竞争 CPU 时间。

    不会挂起运行本机代码的线程。

  • 工作站垃圾回收始终用在只有一个处理器的计算机上,而不管 <gcServer> 设置如何。 如果你指定服务器垃圾回收,则 CLR 会使用工作站垃圾回收,并禁用并发。

以下是服务器垃圾回收的线程处理和性能注意事项:

  • 回收发生在以 THREAD_PRIORITY_HIGHEST 优先级运行的多个专用线程上。
  • 为每个 CPU 提供一个用于执行垃圾回收的一个堆和专用线程,并将同时回收这些堆。 每个堆都包含一个小对象堆和一个大对象堆,并且所有的堆都可由用户代码访问。 不同堆上的对象可以相互引用。
  • 因为多个垃圾回收线程一起工作,所以对于相同大小的堆,服务器垃圾回收比工作站垃圾回收更快一些。
  • 服务器垃圾回收通常具有更大的段。 但是请注意,这是通常情况:段大小特定于实现且可能更改。 调整应用程序时,不应假设垃圾回收器分配的段大小。
  • 服务器垃圾回收会占用大量资源。 例如,如果在一台具有 4 个处理器的计算机上运行了 12 个进程,则在它们都使用服务器垃圾回收的情况下,将有 48 个专用垃圾回收线程。 在高内存加载的情况下,如果所有进程开始执行垃圾回收,则垃圾回收器将要计划 48 个线程。

如果运行应用程序的数百个实例,请考虑使用工作站垃圾回收并禁用并发垃圾回收。 这可以减少上下文切换,从而提高性能。

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

时间: 2024-10-01 03:50:31

.net 垃圾回收 工作站与服务器区别的相关文章

autorelease 和垃圾回收制(gc)的区别

IPhone OS有没有垃圾回收?autorelease 和垃圾回收制(gc)有什么关系? 没有.autorelease只是延迟释放,gc是每隔一段时间询问程序,看是否有无指针指向的对象,若有,就将它回收.他们 两者没有什么关系.

Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别

虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对象,在某个时刻会被系统gc掉 . Dalvik和标准Java虚拟机(JVM)首要差别Dalvik 基于寄存器,而 JVM 基于栈.基于寄存器的虚拟机对于编译后变大的程序来说,在它们执行的时候,花费的时间更短.Dalvik和Java运行环境的区别1:Dalvik主要是完成对象生命周期管理,堆栈管理,线

服务器和工作站有什么区别吗?五大区别!

服务器和工作站都是高性能的计算机,服务器作为互联网时代企业发展必不可少的硬件设备被用户所熟知,然而了解工作站的用户却不多,以及很多人都不清楚服务器和工作站到底有什么区别?那么今天咱们就好好聊聊... 服务器(Server ),也称伺服器,是提供计算服务的设备.工作站(Workstation)是一种高端的通用微型计算机.它们主要有五大区别,一起看看~~ 外形区别 服务器按外形划分可以划分为:塔式服务器.机架式服务器.刀片式服务器.服务器的机箱主要以机架式为主. 而工作站的机箱主要以塔式为主. 目的

关于C#的垃圾回收机制,Finalize和Dispose的区别(自认为很清晰了,有疑问的评论)

来到个新地方,新学习C#,前面看到C#的垃圾回收,Finalize和Dispose时,总是一知半解,迷迷糊糊.这次好了,前面连续两次面试问到这个问题,脑子里不是很清晰,加上用英文来表达,更是雪上加霜的感觉. 回来,好好看了相关资料,从网上看,总没有人能说的很清晰,往往很深奥的样子,拿了本<C# language 7.0>,这样中英文结合看,总算清晰了. 现在主要是找工作,没有时间写详细,先就说个重点: 1. 垃圾回收器GC负责托管对象的回收.GC通过应用根对象(如全局变量,静态变量等)能否访问

CLR垃圾回收的设计

CLR垃圾回收的设计 作者: Maoni Stephens (@maoni0) - 2015 附: 关于垃圾回收的信息,可以参照本文末尾资源章节里引用的垃圾回收手册一书. 组件架构 GC包含的两个组件分别是内存分配器和垃圾收集器.内存分配器负责获取更多的内存并在适当的时候触发垃圾收集.垃圾收集器回收程序中不再使用的对象的内存. 有多种方法调用垃圾回收器,例如人工调用GC.Collect或者当终结线程在接收到表示低内存的异步通知时(调用). 内存分配器的设计 内存分配器由执行引擎(EE)的内存分配

c# -- 对象销毁和垃圾回收

有些对象需要显示地销毁代码来释放资源,比如打开的文件资源,锁,操作系统句柄和非托管对象.在.NET中,这就是所谓的对象销毁,它通过IDisposal接口来实现.不再使用的对象所占用的内存管理,必须在某个时候回收:这个被称为无用单元收集的功能由CLR执行. 对象销毁和垃圾回收的区别在于:对象销毁通常是明确的策动:而垃圾回收完全是自动地.换句话说,程序员负责释放文件句柄,锁,以及操作系统资源:而CLR负责释放内存. 本章将讨论对象销毁和垃圾回收,还描述了C#处理销毁的一个备选方案--Finalize

JavaGC专家(1)—深入浅出Java垃圾回收机制

在学习GC之前,你首先应该记住一个单词:"stop-the-world".Stop-the-world会在任何一种GC算法中发生.Stop-the-world意味着 JVM 因为要执行GC而停止了应用程序的执行.当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态,直到GC任务完成.GC优化很多时候就是指减少Stop-the-world发生的时间. 按代的垃圾回收机制 在Java程序中不能显式地分配和注销内存.有些人把相关的对象设置为null或者调用Sy

.NET内存管理、垃圾回收

1. Stack和Heap    每个线程对应一个stack,线程创建的时候CLR为其创建这个stack,stack主要作用是记录函数的执行情况.值类型变量(函数的参数.局部变量 等非成员变量)都分配在stack中,引用类型的对象分配在heap中,在stack中保存heap对象的引用指针.GC只负责heap对象的释 放,heap内存空间管理 Heap内存分配        除去pinned object等影响,heap中的内存分配很简单,一个指针记录heap中分配的起始地址,根据对象大小连续的分

成为JavaGC专家(1)—深入浅出Java垃圾回收机制

转载自:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用. 这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者.如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开 发经验.如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点.当然,我们不能以偏概全,这不