Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Àí½âC#¶ÔÏóÉúÃüÖÜÆÚ
 
À´Ô´£ºwww.cnblogs.com ·¢²¼ÓÚ£º 2017-6-23
  3243  次浏览      27
 

.NET ¶ÔÏóÊÇÔÚÒ»¸ö½Ð×öÍйܶѣ¨managed heap£©µÄÄÚ´æÖзÖÅäµÄ£¬ËüÃǻᱻÀ¬»ø»ØÊÕÆ÷(garbage collector)×Ô¶¯Ïú»Ù¡£

ÔÚ½²½â֮ǰ£¬Äã±ØÐëÖªµÀÀà(class)£¬¶ÔÏó(object)£¬ÒýÓÃ(reference)£¬Õ»(stack)ºÍ¶Ñ(heap)µÄÒâ˼¡£

Ò»¸öÀàÖ»ÊÇÒ»¸öÃèÊöÕâÖÖÀàÐ͵ÄʵÀý(instance)ÔÚÄÚ´æÖв¼¾ÖµÄÀ¶Í¼¡£µ±È»£¬ÀàÊǶ¨ÒåÔÚÒ»¸ö´úÂëÎļþÖУ¨ÔÚC#ÖдúÂëÎļþÒÔ.cs×÷Ϊºó׺£©¡£

Ò»¸ö¼òµ¥µÄCar À࣬¶¨ÒåÔÚÒ»¸ö½Ð×öSimpleGCµÄC# Console ApplicationÖУº

//Car.cs
2 public class Car
3 {
4 private int currSp;
5 private string petName;
6 public Car(){}
7 public Car(String name, int speed)
8 {
9 petName = name;
10 currSp = speed;
11 }
12 public override string ToString(){
13 return string.Format ("{0} is going {1} MPH", petName, currSp);
14 }
15 }

µ±Ò»¸öÀà±»¶¨ÒåºÃÁË£¬¾Í¿ÉÒÔʹÓÃC# new¹Ø¼ü×ÖÀ´·ÖÅäÈÎÒâÊýÁ¿µÄÕâ¸öÀà¡£

ÐèÒªÀí½âµÄÊÇ£¬new¹Ø¼ü×Ö·µ»ØµÄÊÇÒ»¸öÔÚ¶ÑÉÏÃæµÄ¶ÔÏóµÄÒýÓ㬲»ÊÇÕâ¸ö¶ÔÏó±¾Éí¡£Õâ¸öÒýÓñäÁ¿´æ´¢ÔÚÕ»ÉÏ£¬ÒÔ±ãÖ®ºóÔÚ³ÌÐòÖÐʹÓá£

µ±ÏëÔÚij¸ö¶ÔÏóÉϵ÷ÓóÉÔ±º¯Êýʱ£¬¶Ô´æ´¢µÄÕâ¸ö¶ÔÏóµÄÒýÓÃʹÓÃC# . ²Ù×÷·û£º

class Program{
2 static void Main(string[] args){
3 //ÔÚÍйܶÑÉÏÃæ´´½¨Ò»¸öеÄCar¶ÔÏó¡£·µ»ØµÄÊÇÒ»¸öÖ¸ÏòÕâ¸ö¶ÔÏóµÄÒýÓÃ
4 Car refToMyCar = new Car("Benz", 50);
5 //C# . ²Ù×÷·ûÓÃÀ´ÔÚÒýÓñäÁ¿ÒýÓõĶÔÏóÉϵ÷Óú¯Êý
6 Console.WriteLine(refToMyCar.ToString());
7 Console.ReadLine();
8 }
9 }¡¡¡¡

ÏÂͼչʾÁËÀ࣬¶ÔÏóºÍÒýÓÃÖ®¼äµÄ¹ØÏµ

¶ÔÏóÉúÃüÖÜÆÚµÄ»ù´¡ÖªÊ¶

µ±ÄãÔÚ´´½¨C#Ó¦ÓóÌÐòʱ£¬ÍйܶѲ»ÐèÒªÄãµÄÖ±½Ó¸ÉÔ¤¡£Êµ¼ÊÉÏ£¬.NET ÄÚ´æ¹ÜÀíµÄ»Æ½ðÔ­ÔòºÜ¼òµ¥£º

ʹÓÃnew¹Ø¼ü×ÖÔÚÍйܶÑÉÏÉêÇëÒ»¸ö¶ÔÏó

Ò»µ©ÊµÀý»¯ºó£¬µ±¶ÔÏó²»ÔÙ±»Ê¹Óõģ¬À¬»ø»ØÊÕÆ÷»áÏú»ÙËü¡£

¶ÔÓÚ¶ÁÕßÀ´Ëµ£¬ÏÂÒ»¸öÃ÷ÏÔµÄÎÊÌâÊÇ£º

¡°À¬»ø»ØÊÕÆ÷Ôõôȷ¶¨ÍйܶÑÖеĶÔÏóÊDz»ÔÙ±»Ê¹Óã¿¡±

¼ò½àµÄ´ð°¸ÊÇ£º

µ±ÄãµÄ´úÂë²»ÔÙʹÓöÑÉÏÃæµÄÕâ¸ö¶ÔÏó£¬À¬»ø»ØÊÕÆ÷»á½«Õâ¸ö¶ÔÏóɾ³ý¡£

¼ÙÉèÄãÔÚ³ÌÐòµÄÀàÀïÓÐÒ»¸ö·½·¨·ÖÅäÁËÒ»¸öCar¶ÔÏóµÄ¾Ö²¿±äÁ¿£º

1 static void MakeACar(){
2 //Èç¹ûmyCarÊÇCar¶ÔÏóµÄΨһÒýÓÃ
3 //Ëü¿ÉÄÜ»áÔÚÕâ¸ö·½·¨·µ»ØÊ±±»Ïú»Ù
4 Car myCar = new Car();
5 }

×¢Ò⣺Car¶ÔÏóµÄÒýÓà (myCar) ÊÇÔÚMakeACar()º¯ÊýÖÐÖ±½Ó´´½¨µÄ²¢ÇÒûÓб»´«µÝµ½º¯ÊýÍⲿ(ͨ¹ýÒ»¸ö·µ»ØÖµ»òÕß ref/out ²ÎÊý)¡£

Òò´Ë£¬Ò»µ©Õâ¸öº¯Êýµ÷ÓÃÍê³É£¬myCarµÄÒýÓò»ÔÙ¿É·ÃÎÊ£¬²¢ÇÒºÍÕâ¸öÒýÓÃÏà¹ØÁªµÄCar¶ÔÏó¿ÉÒÔ±»À¬»ø»ØÊÕÁË¡£µ«ÊÇ£¬²»Äܱ£Ö¤ÔÚMakeACar()º¯Êýµ÷ÓÃÍê³ÉºóÕâ¸ö¶ÔÏó±»Á¢¼´´ÓÄÚ´æÖÐÏú»Ù¡£

ÔÚ´ËʱֻÄܼÙÉèµ±CLR Ö´ÐÐÏ´ÎÀ¬»ø»ØÊÕʱ£¬myCar¶ÔÏóÄܹ»±»°²È«µÄÏú»Ù¡£

The CIL of new

µ±C#±àÒëÆ÷Óöµ½new¹Ø¼ü×Ö£¬Ëü»áÔÚº¯ÊýʵÏÖÖвåÈëÒ»¸ö CIL newobjÖ¸Áî¡£Èç¹ûÄã±àÒ뵱ǰµÄÀý×Ó´úÂ벢ʹÓÃildasm.exeÀ´ä¯ÀÀÉú³ÉµÄ´úÂ룬Äã»áÔÚMakeACar()º¯ÊýÖз¢ÏÖÈçϵÄCILÓï¾ä£º

ÔÚÎÒÃÇÖªµÀÍйܶÑÖеĶÔÏóʲôʱºò±»ÒƳýµÄÈ·ÇÐÌõ¼þ֮ǰ£¬×Ðϸ²é¿´Ò»ÏÂCIL newobjÖ¸ÁîµÄ×÷Óá£

Ê×ÏÈ£¬ÐèÒªÃ÷°×ÍйܶѲ»½ö½öÊÇÒ»¸ö¿ÉÓÉCLR·ÃÎʵÄËæ»úÄÚ´æ¿é¡£.NETÀ¬»ø»ØÊÕÆ÷ÊÇÒ»¸öÕû½àµÄ¶Ñ¹Ü¼Ò£¬³öÓÚÓÅ»¯µÄÄ¿µÄËü»áѹËõ¿ÕÏеÄÄÚ´æ¿é£¨µ±ÐèҪʱ£©¡£ÎªÁ˸¨ÖúѹËõ£¬Íйܶѻáά»¤Ò»¸öÖ¸Õë(ͨ³£±»½Ð×öÏÂÒ»¸ö¶ÔÏóÖ¸Õ루the next object pointer£©»òÕßÊÇжÔÏóÖ¸Õ루new object pointer£©£©£¬Õâ¸öÖ¸ÕëÓÃÀ´±êʶÏÂÒ»¸ö¶ÔÏóÔÚ¶ÑÖзÖÅäµÄµØÖ·¡££¨ ÒëÕß×¢£ºÎªÁ˸ĽøÐÔÄÜ£¬ÔËÐÐʱ»áÔÚÒ»¸öµ¥¶ÀµÄ¶ÑÖÐΪ´óÐͶÔÏó£¨>85,000Bytes)·ÖÅäÄÚ´æ ¡£Ò»°ãÇé¿ö϶¼ÊÇÊý×飬ºÜÉÙÓÐÕâô´óµÄ¶ÔÏó¡£ À¬»ø»ØÊÕÆ÷»á×Ô¶¯ÊÍ·Å´óÐͶÔÏóµÄÄÚ´æ¡£ µ«ÊÇ£¬ÎªÁ˱ÜÃâÒÆ¶¯ÄÚ´æÖеĴóÐͶÔÏ󣨺Äʱ£©£¬²»»áѹËõ´ËÄÚ´æ¡£ £©

ÕâЩÐÅÏ¢±íÃ÷£¬newobjÖ¸Áî֪ͨCLRÀ´Ö´ÐÐÏÂÁеĺËÐÄÈÎÎñ£º

¼ÆËãÒª·ÖÅäµÄ¶ÔÏóËùÐèµÄÈ«²¿Äڴ棨°üÀ¨Õâ¸öÀàÐ͵ÄÊý¾Ý³ÉÔ±ºÍÀàÐ͵ĻùÀàËùÐèµÄÄڴ棩¡£

¼ì²éÍйܶÑÀ´È·±£ÓÐ×ã¹»µÄ¿Õ¼äÀ´·ÅÖÃËùÉêÇëµÄ¶ÔÏó¡£Èç¹ûÓÐ×ã¹»µÄ¿Õ¼ä£¬»áµ÷ÓÃÕâ¸öÀàÐ͵Ĺ¹Ô캯Êý£¬¹¹Ô캯Êý»á·µ»ØÒ»¸öÖ¸ÏòÄÚ´æÖÐÕâ¸öжÔÏóµÄÒýÓã¬Õâ¸öжÔÏóµÄµØÖ·¸ÕºÃ¾ÍÊÇÏÂÒ»¸ö¶ÔÏóÖ¸ÕëÉÏÒ»´ÎËùÖ¸ÏòµÄλÖá£

×îºó£¬ÔÚ°ÑÒýÓ÷µ»Ø¸øµ÷ÓÃÕß֮ǰ£¬ÈÃÏÂÒ»¸ö¶ÔÏóÖ¸ÕëÖ¸ÏòÍйܶÑÖÐÏÂÒ»¸ö¿ÉÓõÄλÖá£

ÏÂÃæµÄͼ½âÊÍÁËÔÚÍйܶÑÉÏ·ÖÅä¶ÔÏóµÄϸ½Ú¡£¡¡¡¡

ÓÉÓÚÄãµÄ³ÌÐòæ×Å·ÖÅä¶ÔÏó£¬ÔÚÍйܶÑÉϵĿռä×îÖÕ»áÂú¡£µ±´¦ÀínewobjÖ¸ÁîµÄʱºò£¬CLR ·¢ÏÖÍйܶÑûÓÐ×ã¹»¿Õ¼ä·ÖÅäÇëÇóµÄÀàÐÍʱ£¬Ëü»áÖ´ÐÐÒ»´ÎÀ¬»ø»ØÊÕÀ´ÊÍ·ÅÄÚ´æ¡£Òò´Ë£¬À¬»ø»ØÊÕµÄÏÂÒ»¸ö¹æÔòÒ²ºÜ¼òµ¥£º

Èç¹ûÍйܶÑûÓÐ×ã¹»µÄ¿Õ¼ä·ÖÅäÒ»¸öÇëÇóµÄ¶ÔÏó£¬Ôò»áÖ´ÐÐÒ»´ÎÀ¬»ø»ØÊÕ¡£

µ±Ö´ÐÐÀ¬»ø»ØÊÕʱ£¬À¬»øÊÕ¼¯Æ÷ÁÙʱ¹ÒÆðµ±Ç°½ø³ÌÖеÄËùÓеĻÏß³ÌÀ´±£Ö¤ÔÚ»ØÊÕ¹ý³ÌÖÐÓ¦ÓóÌÐò²»»á·ÃÎʵ½¶Ñ¡££¨Ò»¸öÏß³ÌÊÇÒ»¸öÕýÔÚÖ´ÐеijÌÐòÖеÄÖ´Ðз¾¶£©¡£Ò»µ©À¬»ø»ØÊÕÍê³É£¬¹ÒÆðµÄÏß³ÌÓÖ¿ÉÒÔ¼ÌÐøÖ´ÐÐÁË¡£»¹ºÃ£¬.NET À¬»ø»ØÊÕÆ÷ÊǸ߶ÈÓÅ»¯¹ýµÄ¡£

°Ñ¶ÔÏóÒýÓÃÖÃΪnull

ÓÐÁËÕâЩ֪ʶ£¬Äã¿ÉÄÜ»áÏëÔÚC#À°Ñ¶ÔÏóÒýÓÃÖÃΪnull»áÓÐʲôÊ·¢Éú¡£

ÀýÈ磬¼ÙÉèMakeACar()¸üÐÂÈçÏ£º

1 static void MakeACar(){
2 Car myCar = new Car();
3 myCar = null;
4 }
5

µ±Äã¸ø¶ÔÏóÒýÓø³ÖµÎªnull£¬±àÒëÆ÷»áÉú³ÉCIL´úÂëÀ´È·±£Õâ¸öÒýÓÃ(Õâ¸öÀý×ÓÖÐÊÇmyCar£©²»»áÖ¸ÏòÈκζÔÏó¡£Èç¹û»¹ÊÇÓÃidasm.exe²é¿´Ð޸ĺóMakeACar()µÄCIL ´úÂ룬»á·¢ÏÖldnullÕâ¸ö²Ù×÷Â루Ëü»áÏòÐéÄâÖ´ÐÐÕ»ÉÏÃæÑ¹ÈëÒ»¸önull£©Ö®ºóÊÇÒ»¸ö stloc.0²Ù×÷Â루ËüÔÚ·ÖÅäµÄCar¶ÔÏóÉÏÉèÖÃnullµÄÒýÓã©£º¡¡¡¡

µ«ÊÇ£¬Äã±ØÐëÀí½âµÄÊÇ£¬ÉèÖÃÒýÓÃΪnull²»»áÇ¿ÖÆÀ¬»ø»ØÊÕÆ÷ÔÚ´ËʱÆô¶¯²¢´Ó¶ÑÉÏɾ³ýÕâ¸ö¶ÔÏó¡£ÄãΨһÍê³ÉµÄÊÂÊÇÏÔʽµØÇжÏÁËÒýÓúÍËü֮ǰָÏòµÄ¶ÔÏóÖ®¼äµÄÁªÏµ¡£

Ó¦ÓóÌÐòµÄ¸ùµÄ×÷ÓÃ(application roots)

»Øµ½À¬»ø»ØÊÕÆ÷ÈçºÎ¾ö¶¨Ò»¸ö¶ÔÏóÊDz»ÔÙ±»Ê¹Óõġ£ÎªÁËÀí½âϸ½Ú£¬ÄãÐèÒªÖªµÀÓ¦ÓóÌÐò¸ùµÄ¸ÅÄî¡£

¼òµ¥À´Ëµ£¬Ò»¸ö¸ùÊÇÒ»¸öÒýÓã¬Õâ¸öÒýÓÃÖ¸Ïò¶ÑÉÏÃæµÄÒ»¸ö¶ÔÏóµÄ¡£ÑϸñÀ´Ëµ£¬Ò»¸ö¸ù¿ÉÒÔÓÐÒÔϼ¸ÖÖÇé¿ö£º

Ö¸ÏòÈ«¾Ö¶ÔÏó(global objects)µÄÒýÓ㨾¡¹ÜC#²»Ö§³Ö£¬µ«CIL´úÂëÔÊÐí·ÖÅäÈ«¾Ö¶ÔÏó£©

Ö¸ÏòÈκξ²Ì¬¶ÔÏó(static objects)/(static fields)

Ö¸ÏòÒ»¸öÓ¦ÓóÌÐò´úÂëÖеľֲ¿¶ÔÏó

Ö¸Ïò´«Èëµ½Ò»¸öº¯ÊýÖеĶÔÏó²ÎÊý

Ö¸ÏòµÈ´ý±»ÖÕ½á(finalized)µÄ¶ÔÏó

ÈκÎÒ»¸öÖ¸Ïò¶ÔÏóµÄCPU¼Ä´æÆ÷

ÒëÕß×¢£ºÃ¿¸öÓ¦ÓóÌÐò¶¼ÓÐÒ»×é¸ù¡£

ÔÚÒ»´ÎÀ¬»ø»ØÊյĹý³ÌÖУ¬ÔËÐл·¾³»á¼ì²éÍйܶÑÉÏÃæµÄ¶ÔÏóÊÇ·ñÈÔÈ»ÊÇ´ÓÓ¦ÓóÌÐò¸ù¿Éµ½´ïµÄ¡£ÎªÁ˼ì²é¿É´ï£¬CLR»á½¨Á¢Ò»¸ö´ú±í¶ÑÉÏÿ¸ö¿É´ï¶ÔÏóµÄͼ¡£¶ÔÏóͼÓÃÀ´¼Ç¼ËùÓпɴïµÄ¶ÔÏó¡£Í¬Ê±£¬×¢ÒâÀ¬»ø»ØÊÕÆ÷¾ø²»»áÔÚͼÉϱê¼ÇÒ»¸ö¶ÔÏóÁ½´Î£¬Òò´Ë±ÜÃâÁË·³È˵ÄÑ­»·ÒýÓá£

¼ÙÉèÍйܶÑÉÏÓÐÃû×ÖΪA,B,C,D,E£¬FºÍGµÄ¶ÔÏ󼯺ϡ£ÔÚÒ»´ÎÀ¬»ø»ØÊÕ¹ý³ÌÖУ¬»á¼ì²éÕâЩ¶ÔÏó£¨Í¬Ê±°üÀ¨ÕâЩ¶ÔÏó¿ÉÄܰüº¬µÄÄÚ²¿¶ÔÏóÒýÓã©ÊÇ·ñÊǸù¿É´ïµÄ¡£Ò»µ©Í¼±»½¨Á¢ÆðÀ´£¬²»¿É´ïµÄ¶ÔÏó£¨ÔÚ´ËÊǶÔÏóCºÍF£©±»±ê¼ÇΪÀ¬»ø¡£

ÏÂͼÊÇÉÏÊö³¡¾°µÄÒ»¸ö¿ÉÄܵĶÔÏóͼ£¨Äã¿ÉÒ԰ѼýÍ·¶Á×÷ÒÀÀµ»òÕßÐèÒª£¬ÀýÈç"EÒÀÀµÓÚG£¬¼ä½ÓÒÀÀµÓÚB£¬¡°A²»ÒÀÀµÈκζÔÏ󡱵ȣ©¡£

´´½¨µÄ¶ÔÏóͼÊÇÓÃÀ´¾ö¶¨ÄÄЩ¶ÔÏóÊÇÓ¦ÓóÌÐò¸ù¿É´ïµÄ¡£

Ò»µ©Ò»¸ö¶ÔÏóÒѾ­±»±ê¼ÇΪÖսᣨ´ËÀý×ÓÖÐÊÇCºÍF--ÔÚͼÖÐûÓÐËûÁ©£©£¬ËüÔÚÄÚ´æÖоͱ»ÇåÀíµôÁË¡£ÔÚ´Ëʱ£¬¶ÑÉϵÄÊ£ÓàÄÚ´æ¿Õ¼ä±»Ñ¹Ëõ£¨compact ·­ÒëΪѹËõ²»Ì«ºÏÊÊ£¬µ«Ò²²»ÖªµÀɶ¸üºÃµÄ´ÊÁË£¬Ñ¹Ëõºó£¬·ÖÅäµÄÄÚ´æ¿Õ¼ä¶¼ÊÇÔÚÒ»Æð£¬Á¬ÐøµÄ£©£¬Õâ»áµ¼ÖÂCLRÐ޸ĻµÄÓ¦ÓóÌÐò¸ù¼¯ºÏ£¨ºÍ¶ÔÓ¦µÄÖ¸Õ룩À´Ö¸ÏòÕýÈ·µÄÄÚ´æÎ»Öã¨Õâ¸ö²Ù×÷ÊÇ×Ô¶¯Í¸Ã÷µÄ£©¡£×îºó£¬µ÷ÕûÏÂÒ»¸ö¶ÔÏóÖ¸ÕëÀ´Ö¸ÏòÏÂÒ»¸ö¿ÉÓõÄÄÚ´æÎ»Öá£

ÏÂͼ²ûÃ÷ÁËÇå³ýºÍѹËõ¶ÑµÄ¹ý³Ì¡£

Àí½â¶ÔÏóµÄ´ú(object generations)

ÔÚ³¢ÊÔÕÒµ½²»¿É´ïµÄ¶ÔÏóʱ£¬CLR²¢²»ÊǼì²éÍйܶÑÉϵÄÿ¸ö¶ÔÏ󡣺ÜÃ÷ÏÔ£¬ÕâÑù×ö»áÏûºÄ´óÁ¿Ê±¼ä£¬ÓÈÆäÔÚ´óÐÍ£¨ÀýÈçÏÖʵÖУ©³ÌÐòÖС£

ΪÁ˰ïÖúÓÅ»¯Õâ¸ö¹ý³Ì£¬¶ÑÉϵÄÿ¸ö¶ÔÏó±»·ÖÅäµ½Ò»¸öÌØÊâµÄ"´ú¡±¡£´úÕâ¸ö¸ÅÄî±³ºóµÄÏë·¨ºÜ¼òµ¥£º¶ÔÏóÔÚ¶ÑÉÏ´æ»îµÄʱ¼äÔ½³¤£¬½ÓÏÂÀ´Ëü¼ÌÐø´æÔڵĿÉÄÜÐÔÒ²¾ÍÔ½´ó£¬¼´½Ï¾ÉµÄ¶ÔÏóÉú´æÆÚ³¤£¬½ÏеĶÔÏóÉú´æÆÚ¶Ì¡£ÀýÈ磬ʵÏÖMain()µÄ¶ÔÏóÒ»Ö±ÔÚÄÚ´æÖУ¬Ö±µ½³ÌÐò½áÊø¡£Ïà·´£¬×î½ü²Å±»·Åµ½¶ÑÖеĶÔÏó£¨ÀýÈçÔÚÒ»¸öº¯Êý·¶Î§Àï·ÖÅäµÄ¶ÔÏ󣩺ܿÉÄܺܿì¾Í²»¿É´ï¡£ÔÚ¶ÑÉϵÄÿ¸ö¶ÔÏóÊôÓÚÒÔϵÄijһ¸ö´ú£º

Generation 0£º ±êʶһ¸ö×î½ü·ÖÅäµÄ»¹Ã»Óб»±ê¼ÇΪ»ØÊյĶÔÏó

Generation 1: ±êʶһ¸ö¾­ÀúÁËÒ»´ÎÀ¬»ø»ØÊÕ¶ø´æ»îÏÂÀ´µÄ¶ÔÏó£¨ÀýÈ磬Ëû±»±ê¼ÇΪ»ØÊÕ£¬µ«ÓÉÓڶѿռ乻ÓöøÃ»Óб»Çå³ýµô£©

Generation 2:±êʶһ¸ö¾­ÀúÁ˲»Ö¹Ò»ÂÖÀ¬»ø»ØÊÕ¶ø´æ»îÏÂÀ´µÄ¶ÔÏó¡£

À¬»ø»ØÊÕÆ÷Ê×ÏÈ»á¼ì²égeneration 0µÄËùÓжÔÏó¡£Èç¹û±ê¼Ç²¢ÇåÀíÕâЩ¶ÔÏó£¨ÒëÕß×¢£ºÒòΪжÔÏóµÄÉú´æÆÚÍùÍù½Ï¶Ì£¬²¢ÇÒÆÚÍûÔÚÖ´ÐлØÊÕʱ£¬Ó¦ÓóÌÐò²»ÔÙʹÓÃµÚ 0 ¼¶ÍйܶÑÖеÄÐí¶à¶ÔÏ󣩺ó²úÉúÁË×㹻ʹÓõÄÄÚ´æ¿Õ¼ä£¬Èκδæ»îÏÂÀ´µÄ¶ÔÏó¾Í±»ÌáÉýµ½Generation 1¡£ÎªÁËÀí½âÒ»¸ö¶ÔÏóµÄ´úÈçºÎÓ°Ïì»ØÊյĹý³Ì£¬¿ÉÒԲ鿴ÏÂͼ¡£ÏÂͼ½âÊÍÁËgeneration 0ÖÐÒ»´ÎÀ¬»ø»ØÊպ󣬴æ»îµÄ¶ÔÏó±»ÌáÉýµÄ¹ý³Ì¡£¡¡¡¡

generation 0 ÖеĴæ»î¶ÔÏó±»ÌáÉýµ½generation 1

Èç¹ûËùÓеÄgeneration 0¶ÔÏó¶¼±»¼ì²éÁË£¬µ«ÊDzúÉúµÄÄÚ´æ¿Õ¼äÈÔÈ»²»¹»Ó㬾ͼì²éÒ»±égeneration 1ÖеÄËùÓжÔÏóµÄ¿É´ïÐÔ²¢»ØÊÕ¡£´æ»îÏÂÀ´µÄgeneration 1¶ÔÏó±»ÌáÉýµ½generation 2¡£Èç¹ûÀ¬»ø»ØÊÕÆ÷ÈÔÈ»ÐèÒª¶îÍâµÄÄڴ棬generation 2µÄ¶ÔÏó¾Í¾­Àú¼ì²é²¢±»»ØÊÕ¡£´Ëʱ£¬Èç¹ûÒ»¸ögeneration 2µÄ¶ÔÏó´æ»îÏÂÀ´£¬ËüÈÔÈ»ÊÇÒ»¸ögeneration 2µÄ¶ÔÏó¡£

ͨ¹ý¸ø¶ÑÖеĶÔÏó¸³ÓèÒ»¸ögenerationµÄÖµ£¬Ð¶ÔÏ󣨱ÈÈç¾Ö²¿±äÁ¿£©»á±»ºÜ¿ì»ØÊÕ£¬¶øÀÏһЩµÄ¶ÔÏó£¨ÈçÒ»¸öÓ¦ÓóÌÐò¶ÔÏ󣩲»»á±»¾­³£É§ÈÅ¡£

ΪÁ˽âÊÍÈçºÎÓÃSystem.GCÀàÀ´»ñµÃÀ¬»ø»ØÊÕµÄϸ½ÚÐÅÏ¢£¬¿¼ÂÇÏÂÃæµÄMainº¯Êý£¬ÀïÃæÓõ½ÁËһЩGCµÄ³ÉÔ±º¯Êý¡£

1 static void Main (string[] args){
2 Console.WriteLine ("*****Fun with System.GC *****");
3 //´òÓ¡³ö¶ÑÉÏÃæµÄ´óÖÂ×Ö½ÚÊý
4 Console.WriteLine ("Estimated bytes on heap:{0}",
5 GC.GetTotalMemory(false));
6 //MaxGeneration»ùÓÚ0£¬ËùÒÔΪÁËÏÔʾ¶ø¼ÓÒ»
7 Console.WriteLine("This OS has{0} object generations.\n"
8 (GC.MaxGeneration+1));
9 Car refToMyCar = new Car("Zippy", 100);
10 Console.WriteLine(refToMyCar.ToString());
11 //´òÓ¡³örefToMyCar¶ÔÏóµÄgeneration
12 Console.WriteLine ("Generation of refToMyCar is:{0}",
13 GC.GetGeneration(refToMyCar));
14 Console.ReadLine();
15 }
16

Ç¿ÖÆ½øÐÐÒ»´ÎÀ¬»ø»ØÊÕ

.NET À¬»ø»ØÊÕÆ÷¾ÍÊÇÓÃÀ´×Ô¶¯¹ÜÀíÄÚ´æµÄ¡£µ«ÊÇ£¬ÔÚijЩ¼«¶ËÇé¿öÏ£¬Í¨¹ýʹÓÃGC.Collect()À´Ç¿ÖÆÒ»´ÎÀ¬»ø»ØÊÕÊÇÓÐÓõġ£ÓÈÆäÊÇ£º

ÄãµÄ³ÌÐò½«Òª½øÈëÒ»¶Î²»Ïë±»¿ÉÄܵÄÀ¬»ø»ØÊÕËùÖжϵĴúÂë¡£

ÄãµÄ³ÌÐò¸ÕÍê³É·ÖÅä´óÁ¿ÊýÄ¿µÄ¶ÔÏóµÄ¹ý³Ì£¬ÄãÏ뾡¿ÉÄÜÇåÀí³ö¸ü¶àÄÚ´æÀ´¡£

Èç¹ûÄã¾õµÃÈÃÀ¬»ø»ØÊÕÆ÷¼ì²é²»¿É´ïÄÚ´æÊÇÊ®·ÖÓбØÒªµÄ£¬ÄãÏñÈçÏ´úÂëÒ»ÑùÏÔʾ´¥·¢Ò»´ÎÀ¬»ø»ØÊÕ£º

1 static void Main(string[] args){
2 //Ç¿ÖÆÒ»´ÎÀ¬»ø»ØÊÕ²¢µÈ´ýÿ¸ö¶ÔÏó±»Öսᡣ
3 GC.Collect();
4 GC.WaitForPendingFinalizers();
5 }

µ±ÄãÊÖ¶¯Ç¿ÖÆÖ´ÐÐÒ»´ÎÀ¬»ø»ØÊÕ£¬ÄãÓ¦¸Ãµ÷ÓÃGC.WaitForPendingFinalizers()¡£ÀûÓÃÕâ¸öº¯Êý£¬Äã¿ÉÒÔÈ·±£ËùÓеĵȴý±»ÖÕ½áµÄ¶ÔÏóÔÚÄãµÄ³ÌÐò¼ÌÐøÍùÏÂÖ´ÐÐ֮ǰӵÓлú»áÖ´ÐÐһЩËùÐèµÄÇåÀí¹¤×÷¡£GC.WaitForPendingFinalizers£¨£©»áÔÚÇåÀíÆÚ¼ä¹ÒÆðµ÷ÓÃËüµÄÏ̡߳£ÕâÊÇÒ»¸öºÃÊ£¬ËüÈ·±£ÄãµÄ´úÂë²»»áÔÚµ±Ç°ÕýÒª±»Ïú»ÙµÄ¶ÔÏóÉϵ÷Óú¯Êý¡£

GC.Collectº¯Êý½ÓÊÕÒ»¸öÊý×Ö²ÎÊýÀ´±êʶÔÚÄĸögenerationÉÏÖ´ÐÐÀ¬»ø»ØÊÕ¡£ÀýÈ磬Èç¹ûÄãÏëÈÃCLRÖ»¼ì²égeneration 0ÉϵĶÔÏó£¬ÄãÐèÒªÕâÑùд£º

1 static void Main(string[] args){
2 //Ö»¼ì²égeneration 0ÉϵĶÔÏó
3 GC.Collect(0);
4 GC.WaitForPendingFinializers();
5 }

.Net 3.5ÖУ¬Collectº¯Êý¿ÉÒÔ´«ÈëÒ»¸öֵΪGCCollectionModeµÄö¾ÙÀàÐÍ×÷ΪµÚ¶þ¸ö²ÎÊý£¬À´¾«È·¶¨ÒåÖ´Ðл·¾³ÈçºÎÖ´ÐÐÀ¬»ø»ØÊÕ¡£Õâ¸öö¾Ù¶¨ÒåÁËÈçϵÄÖµ£º

1 public enum GCCollectionMode{
2 Default,//ForedÊǵ±Ç°µÄĬÈÏÖµ
3 Forced,//¸æËßÖ´Ðл·¾³Á¢¼´Ö´ÐлØÊÕ
4 Optimized //ÈÃÔËÐл·¾³À´¾ö¶¨µ±Ç°Ê±¼äÊÇ·ñÊÇÇåÀí¶ÔÏóµÄ×î¼Ñʱ¼ä
5 }

ÏñÆäËûµÄÀ¬»ø»ØÊÕÒ»Ñù£¬µ÷ÓÃGC.Collect()»áÌáÉý´æ»îÏÂÀ´µÄ¶ÔÏó¡£¼ÙÉèMainº¯Êý´úÂë¸üÐÂÈçÏ£º

1 static void Main(string[] args)
2 {
3 Console.WriteLine ("***** Fun with System.GC *****");
4 //´òÓ¡³ö¶ÑÉϵĴóÖÂ×Ö½ÚÊý
5 Console.WriteLine ("Estimated bytes on heap:{0}", GC.GetTotalMemory(false));
6 //MaxGeneration»ùÊýΪ0.
7 Console.WriteLine("This OS has {0} object generations.\n", (GC.MaxGeneration+1));
8 Car refToMyCar = new Car("Zippy", 100);
9 Console.WriteLine (refToMyCar.ToString());
10 //Print out generation of refToMyCar.
11 Console.WriteLine ("\nGeneration of refToMyCar is:{0}", GC.GetGeneration(refOfMyCr));
12 //ΪÁ˲âÊÔ´´½¨´óÁ¿¶ÔÏó
13 object[] tonsOfObjects = new object[50000];
14 for(int i=0;i<50000;i++)
15 tonsOfObjects[i] = new object();
16 //Ö»»ØÊÕgen0µÄ¶ÔÏó
17 GC.Collect(0, GCCollectionMode.Forced);
18 GC.WaitForPendingFinalizers();
19 //´òÓ¡³örefToMyCarµÄgeneration
20 Console.WriteLine ("Generation of refToMyCar is:{0}", GC.GetGeneration(refToMyCar));
21 //²é¿´tonsOfObjects[9000] ÊÇ·ñ»¹´æ»î×Å
22 if(tonsOfObjects[9000]!=null)
23 {
24 Console.WriteLine ("Generation of tonsOfObjects[9000] is :{0}", GC.GetGeneration(tonsOfObjects[9000]));
25 }
26 else
27 Console.WriteLine ("tonsOfObjects[9000] is no longer alive.");
28 //´òÓ¡³öÿ¸öGeneration¾­ÀúÁ˶àÉٴλØÊÕ
29 Console.WriteLine ("\nGen 0 has been swept {0} times", GC.CollectionCount(0));
30 Console.WriteLine ("Gen 1 has been swept {0} times", GC.CollectionCount(1));
31 Console.WriteLine("Gen 2 has been swept {0} times", GC.CollectionCount(2));
32 Console.ReadLine();
33 }
34

ÕâÀÎÒÃÇΪÁ˲âÊÔÄ¿µÄÓÐÒâµÄ´´½¨ÁËÒ»¸ö·Ç³£´óµÄ¶ÔÏóÊý×飨50,000¸ö£©¡£Äã¿ÉÒÔ´ÓÏÂͼÖп´µ½Êä³ö£¬¾¡¹ÜÕâ¸öMain()º¯ÊýÖ»ÏÔʾµ÷ÓÃÁËÒ»´ÎÀ¬»ø»ØÊÕ£¨Í¨¹ýGC.Collect()º¯Êý), µ«CLR ÔÚÄ»ºóÖ´ÐÐÁ˶à´ÎÀ¬»ø»ØÊÕ¡£¡¡¡¡

   
3243 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì