.NET???????????????
???????????? ???????[ 2013/4/19 10:32:04 ] ????????
??????????????????????????????????????????????????????????????????????????OutOfMemoryException?????????????鶴?????????к???????檔??????????????????????????????????????????????——??????????δ???????????????????.NET?????????????????????????е???棬???????????????????????????????????о????????????????????????????????????????——???????LOH??????á????????????????????????????????????????????????????ɡ?
???????????????????????????????????32λ????
????????????????????????????????????й????????????????£?????????OutOfMemoryException???????Ч????棨????????GC Root?????????????棩??????????????2G??1G??500M??50M???????С?????????????????Ц??????????????δ???
public class Program
{
static void Main(string[] args)
{
var smallBlockSize = 90000;
var largeBlockSize = 1 << 24;
var count = 0;
var bigBlock = new byte[0];
try
{
var smallBlocks = new List<byte[]>();
while (true)
{
GC.Collect();
bigBlock = new byte[largeBlockSize];
largeBlockSize++;
smallBlocks.Add(new byte[smallBlockSize]);
count++;
}
}
catch (OutOfMemoryException)
{
bigBlock = null;
GC.Collect();
Console.WriteLine("{0} Mb allocated"??
(count * smallBlockSize) / (1024 * 1024));
}
Console.ReadLine();
}
}
??????δ?????????????????С?????????????????飬???н?С??????С?90?? 000???????????????С??16M???????????????????????????15??????????????????bigBlock?????????·????????飬????????????????????????????????????OutOfMemoryException??????????????count??С??????????С? 16M + count ??????鴦????Ч?????????????????????С???????????????????
????????????????????????н??——?????????ж??????????£????????????????δ?????????????64λ????????????????????x86??
23 Mb allocated
?????????32λ??????2G???????棬????????????????1%??
???????漴?????????????????????????????????????????????????Щ???????????????????ο?http://msdn.microsoft.com/en-us/magazine/cc534993.aspx???????????????
????.NET????????????????“Generation”??????????????G0?? G1?? G2????Generation?????????£?????′??????????????G0??????????????????????????δ???????????????????Generation??G0 -> G1 -> G2????????????????????G2?????????????G2?С?
?????????????????????????????Generation??????????????棨?????????????????????????????????????????????????????????δ??ò???????P??????????????????????????P?????????????P?????????????????????????????????????????????????????.NET?д???????????????C??C++????д????????????——??????????????????????????????????????
??????????Generation?????????????????????????????п??????Ч??????????????????????????Ч?????е??????????????????????????????????
???????????????????????????“??????”???.NET????????????????????????????СС??85?? 000???????????С??????????????????????????????????????С??85?? 000????????????????????????????????????????????????????.NET?У????д????????????????????????????棨LOH?? Large Object Heap???е???????????????????????????G2??????????????Generation 2??????????????????LOH?????????LOH??????????????????????棡?????????LOH???????÷?????????——?????????????????????????????????LOH??β?????з??????β???????????????????????????????????????????????????????????????Ч???????μ??????????????????
????????????
????1??LOH??????????????С?85K???????????С?16M??????????????????????С?85K????????????β????????
????2?????????????????????????С?16M???????????????????δ??????????????????ж?LOH?????????
????3???????????????С?16.1M???????????????LOHβ????????β????????????
????4????????????????????????棬?????????????β????
????5??????????????????????С?85K??????????????β??????
???????????????????????LOH????????????????????????16M + N?????????????????????κ???????????????????????????????OutOfMemoryExceptiojn????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11