mono的gc一直 使用 conservative gc..可见其文档的描述。是一种较为落后的实现,没有分代。在最近的2.8版本中多了
一种sgen的新gc..据称性能不错..原来的gc一直有precise stack scanning的问题。在一些stack上分配的对象存在无法收集的可能性。
前天看到一文:
http://flyingfrogblog.blogspot.com/2010/07/mono-24-still-leaking-like-sieve.html
需要凸墙...
作者用了一个简单的代码来证实这种memory leak的存在。我用c#改写了,代码如下:
public class MainS
{
public static void Main(string[] args)
{
for(var i = 0; i!=30; ++i)
{
var t = new Dictionary<int,int>();
for(var j = 0; j!=10000000; ++j)
{
t[j] = j;
}
Console.WriteLine(string.Format("{0},{1}",t.Count,i));
//GC.Collect();
}
Console.WriteLine("haha");
}
}
此段代码在 mono 默认的gc上无法执行,会报outofmemory的错误..在新的sgen gc上勉强可以运行一阵子,但是最终会报sgen内部的一些错误。如果想要正确运行。那么可以把注释的部分打开 。。或者加入t.Clear()。这样在sgen gc下可以正常运行。在原有的gc依然不行。。
此段代码在注释掉gc.collect下在ms .net 3.5, .net 4.0均可以正常运行。现在看来mono的gc虽然有进步但是还不尽人意。。
出于好奇,我在python也实现了同样的代码,也没有任何问题。
据roadmap称,mono 2.10在gc方面将会有比较大的改进,希望如此。
测试环境: ubuntu10.04 32 bit, mono 2.8.2
windows 7 64 bit, .net 4.0, .net 3.5
有趣的是,如果把i 和 j的值 互换并不会出现问题。。看起来似乎mono的gc对 stack的大量对象存在回收的问题...
分享到:
相关推荐
这个“游戏引擎实现c++调用c#脚本功能mono.rar”压缩包包含的文件正是与这个过程相关的Mono库。 Mono是一个开源的.NET框架实现,它使得开发者可以在多个平台上运行基于.NET的应用,包括游戏引擎中的脚本。在Unity中...
在.NET和Mono环境中,开发高性能的应用程序时,内存管理和垃圾回收(GC)是至关重要的考虑因素。"Buffer Manager"是一个设计来优化内存使用并减轻垃圾收集压力的工具或策略。本文将深入探讨如何通过有效管理缓冲区来...
key_support_color_effect = none,mono,negative,sepia,aqua key_default_color_effect = none used_frame_rate = 1 key_support_frame_rate = 30 key_default_frame_rate = 30 used_focus_mode = 1 key_support_...
key_support_color_effect = none,mono,negative,sepia,aqua key_default_color_effect = none used_frame_rate = 1 key_support_frame_rate = 10 key_default_frame_rate = 10 used_focus_mode = 0 key_support_...
数据说明名称说明Overview函数名称totalLuaMemory此函数生成的所有Lua GC的总和self函数本身产生的GC量...Mono GC totalCalls游戏开始后此功能的运行次数Calls函数当前帧的执行次数常问问题运行起来后totalLuaM
v2: fix gc error. INSTRUCTIONS 1. Copy "mandroid.exe" to "C:\Program Files (x86)\MSBuild\Xamarin\Android" (or "C:\Program Files\MSBuild\Xamarin\Android" if you are on a 32-bit operating system) 2. ...
例如,可以使用Mono项目的Mono.X11库。这个库为.NET提供了一个C#绑定,使得我们能够调用X11的函数。安装可以通过NuGet包管理器进行,或者手动添加库的DLL到项目中。 2. **导入X11库** 在代码中,首先需要导入Mono....
xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 xLua的突破 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是: 可以运行时把C#实现...
xLua为C#环境(如Unity,.Net,Mono等)添加了Lua脚本编程功能。使用 xLua,这些 Lua 代码可以很容易地用 C# 调用。xLua 在功能、性能和易用性方面有很多突破。这些方面中最具代表性的是C#实现(方法、运算符、属性...
C#下Lua编程支持xLua为Unity,.Net,Mono等C#环境增加了Lua脚本编程的能力,可以使用xLua,这些Lua代码可以方便的和C#相互调用。xLua的突破xLua在功能,性能,易用性都有过多的突破,这几方面分别具有代表性的是...
GC的概念并不是新生事物,早在1958年,Lisp语言就已经提供了GC的功能。然而,在那个时候,GC的速度和对系统资源的大量占用使很多人无法接受。直到20世纪90年代中期,GC才以主角的身份登上了历史的舞台,主要归功于...
而引用类型则存储在堆上,由mono/.net的垃圾回收器(GC)进行管理。 垃圾回收是管理托管内存中的重要环节。在Unity中,垃圾回收器可能会在主线程上运行,也可能在程序显式调用GC.Collect()时运行。GC.Collect()的...
3. **gc6.1.tar.gz**:这可能是垃圾回收(Garbage Collection)系统的一个版本,用于管理内存,确保C#程序的高效运行。 4. **xsp-0.2.tar.gz**:XSP是Mono项目的一部分,是一个轻量级的ASP.NET服务器,允许在Linux上...
key_support_color_effect = none,mono,negative,sepia,aqua key_default_color_effect = none used_frame_rate = 1 key_support_frame_rate = 10 key_default_frame_rate = 10 used_focus_mode = 0 key_support_...
key_support_color_effect = none,mono,negative,sepia,aqua key_default_color_effect = none used_frame_rate = 1 key_support_frame_rate = 10 key_default_frame_rate = 10 used_focus_mode = 0 key_support_...
- **GC机制**:垃圾回收(Garbage Collection, GC)负责自动回收不再使用的对象占用的内存空间,以防止内存泄漏。 - **避免策略**: - 减少对象的创建:尽量复用对象,避免频繁创建新对象。 - 使用池化技术:对于...