Лучшие подходы к управлению версиями файлы “пакета” Mac

[Просто хотелось добавить дальше в процесс «Внутренние процессы завершения»]

Итак, вы создаете объект, и когда объект собирается, следует вызвать метод Finalize объекта. Но есть еще кое-что для завершения, чем это очень простое предположение.

КРАТКИЕ КОНЦЕПЦИИ ::

  1. Объекты НЕ реализуют методы Finalize, там память немедленно исправляется, если, конечно, , они больше не выполняются с помощью кода приложения
  2. Объекты, реализующие метод Finalize, Концепция / Реализация Application Roots, Finalization Queue, Freacheable Queue предшествует их исправлению.
  3. Любой объект считается мусором, если он не доступен для кода приложения

Предположим: классы / объекты A, B, D, G, H НЕ реализуют Finalize Метод и C, E, F, I, J реализуют метод Finalize.

Когда приложение создает новый объект, новый оператор выделяет память из кучи. Если тип объекта содержит метод Finalize, указатель на объект помещается в очередь финализации . , поэтому указатели на объекты C, E, F, I, J добавляются в очередь финализации. Очередь финализации - это внутренняя структура данных, управляемая сборщиком мусора. Каждая запись в очереди указывает на объект, который должен иметь метод Finalize, вызываемый до того, как память объекта может быть восстановлена. На рисунке ниже показана куча, содержащая несколько объектов. Некоторые из этих объектов доступны из корней приложения , а некоторые нет. Когда объекты C, E, F, I и J были созданы, инфраструктура .Net обнаруживает, что эти объекты имеют Finalize методы и указатели на эти объекты, добавляются в очередь завершения . enter image description here [/g18]

Когда GC происходит (первая коллекция), объекты B, E, G, H, I и J определяются как мусор. Поскольку A, C, D, F по-прежнему сохраняются в коде приложения, изображенной стрелками из желтой коробки выше.

Сборщик мусора сканирует очередь завершения ища указатели на эти объекты. Когда указатель найден, указатель удаляется из очереди финализации и добавляется в свободную очередь («F-достижимая»). freachable queue - это другая внутренняя структура данных, управляемая сборщиком мусора. Каждый указатель в freachable queue идентифицирует объект, который готов к вызову метода Finalize.

После коллекции (1-я коллекция) управляемая куча выглядит примерно так, как ниже. Объяснение, приведенное ниже: 1.) Память, занятая объектами B, G и H, была немедленно исправлена, потому что у этих объектов не был метод finalize, который нужно было называть .

2.) Однако память, занятая объектами E, I и J, не могла быть восстановлена, потому что их метод Finalize еще не был вызван. Вызов метода Finalize выполняется с помощью

3.) A, C, D, F по-прежнему доступны в виде кода приложения, изображенного стрелками из желтой коробки выше, поэтому они НЕ будут собраны в любом case enter image description here [/g19]

Существует специальный поток времени выполнения, посвященный вызовам методов Finalize. Когда freachable queue пуст (как правило, это так), этот поток засыпает. Но когда появляются записи, этот поток просыпается, удаляет каждую запись из очереди и вызывает метод Finalize каждого объекта. Сборщик мусора сжимает возвращаемую память, и специальный поток времени запуска освобождает свободную очередь, выполняя метод Finalize каждого объекта. Итак, вот наконец, когда ваш метод Finalize выполняется

В следующий раз, когда вызывается сборщик мусора (2-я сборка), он видит, что финализированные объекты действительно мусор, так как корни приложения не используются, t указывает на него, а [freelable queue] больше не указывает на него (это тоже ПУСТОЙ), поэтому память для объектов (E, I, J) просто восстанавливается из диаграммы Heap.See ниже и сравнивается это с рисунком чуть выше enter image description here [/g20]

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

ПРИМЕЧАНИЕ :: . Распределенная очередь считается корнем, как и глобальная и статические переменные являются корнями. Поэтому, если объект находится в freachable queue, тогда объект доступен и не является мусором.

Как последнее примечание, помните, что приложение для отладки - это одно, а Garbage Collection - это еще одна вещь и работает по-разному. Пока вы не можете ЧУВСТВИТЬ сборку мусора, просто отлаживая приложения, и если вы хотите исследовать память, то получите здесь.

6
задан Mark Harrison 28 August 2008 в 19:05
поделиться

2 ответа

Для распределенных систем SCM как мерзавец и подвижный не должна быть проблема, как Matthew упомянул.

Если необходимо использовать централизованный SCM как Подверсия или CVS, то Вы можете на молнии (архив) Ваши пакеты прежде, чем проверить их в управлении исходным кодом. Это может быть болезненно и делает дополнительный шаг. Существует хорошее сообщение в блоге об этом в Центральном Гобелене:

Mac OS X связывается по сравнению с Подверсией

Эта статья демонстрирует рубиновый сценарий, который справляется с архивацией для Вас.

1
ответ дан 17 December 2019 в 04:54
поделиться

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

Это также означает, что каталог, который заменяется, как Приложение или другой Пакет, все еще найдет, что это - содержание с конкретными именами файлов при управлении версиями. Имена файлов контролируются, не inodes, или что-либо полагает как этот!

Очевидно, если новый файл будет добавлен к Пакету, то необходимо будет явно добавить это к репозиторию. Точно так же удаление файла от Пакета должно быть, покончили 'hg комната'.

Еще нет никаких достойных Подвижных графический интерфейсов пользователя для OS X, но если все, что Вы делаете, добавляют/фиксируют/объединяют, не случается так что трудно использовать командную строку.

2
ответ дан 17 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: