[翻译]设计.Net Compact Framework(二)[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

当程序被执行时,JIT编译器会在堆上分配内存,用来存储每个方法编译生成的本地代码。因为编译和内存分配发生在每个方法运行的时候,每次内存分配都会让堆相应减少。换句话说,就是JIT堆在小幅度地逐渐增长。在程序运行过程中,JIT堆会增长到很大的程度。在Compact Framework的早期版本中,JIT堆的尺寸被限制在一个固定的大小中。在第二版中,这个限制已经被去掉了,因此在新方法需要被编译时,堆会增加。

三种情况的发生,会导致JIT堆的大部分空间被释放并将内存归还给OS(这里只所以说“大部分空间”是因为Compact Framework必须始终保留当前执行应用程序方法的jitted代码)。首先,如果CLR试图分配更多内存时,收到一个来自操作系统的错误,JIT堆将会收缩。CLR会认为这个失败表明可用内存数量不足,于是尽可能多的挥手JIT堆中的代码。从JIT堆中释放本地代码的动作是根据代码存在期限决定的。其次,当一个程序被切换到后台时,代码会被回收。在Windows Mobile中,应用程序通常不会被关闭,但是会被切换到后台。当一个程序被切换到后台时,通过释放代码,CLR可以获得更多可用内存供前台程序使用,这样可以增加同时运行在设备上应用程序的数量。最后,当一个托管应用程序收到来自Windows CEWM_HIBERNATE消息时,CLR会回收jitted

本文关键:[翻译]设计.Net Compact Framework(二)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top