Блог

Сборка мусора и локальные переменные


Если вы программируете на C#, то у меня для вас вопрос. Как вы думаете, сколько раз будет выводиться в консоль строка "GC called" при исполнении следующего кода:

using System;
using System.Threading;

class GarbageCollectorTest
{
   public static void Main()
   {
      Timer t = new Timer(CallGC, null, 1000, 1000);
      Console.ReadKey();
   }

   static void CallGC(object o)
   {
      GC.Collect();
      Console.WriteLine("GC called");
   }
}



Правильный ответ: зависит от параметров компиляции. В release-сборке строка выведется только один раз. В debug-сборке строка будет выводится до нажатия пользователем клавиши.

В C++ время жизни локальной (автоматической) переменной определяется областью ее видимости - переменная уничтожается в момент выхода потока исполнения из этой области.
В C# время жизни такой переменной определяется областью ее использования. Т.е., переменная может быть уничтожена до окончания области своей видимости, если сборщик мусора посчитает, что переменная больше не используется.
В debug-сборках для удобства отладки время жизни переменной искусственно удлиняется до окончания области видимости.

Что касается Java, то насколько мне известно спецификация JVM тоже допускает подобную реализацию сборщика мусора.

P.S.: Если вы программируете на C# и для вас этот пост оказался откровением, прочтите книгу Джеффри Рихтера "СLR via C#". Там вы сможете найти еще много интересного, а главное - полезного для серьезной разработки для .NET Framework.

Ярлыки: ,


Комментарии: 2:

В 12 января 2011 г., 12:41 , Blogger Slash сказал(а)...

Что качается Java, то это аморально, удалять объекты до завершения блока. Если бы я хотел это сделать, я бы обнулил ссылку, и всё было бы очевидно. Спасибо за интересную информацию.

 
В 12 января 2011 г., 20:01 , Blogger Alex Che сказал(а)...

С другой стороны, сложно представить себе реальную ситуацию, когда подобная реализация может помешать. В то же время с точки зрения производительности польза очевидна.

 

Отправить комментарий

Подпишитесь на каналы Комментарии к сообщению [Atom]

<< Главная страница

Optixsoft - Разработка ПО для волоконной оптики. 2013. Все права сохранены.