Вы Рихтера внимательно читали?
Второе поколение - это большие объекты ( конкретный размер зависит от ПК), сразу 2-е поколение.
Объект можно застолбить за определенным адресом в памяти, и об этом тоже написано в книге.
Точно не помню но вроде volatile не только делает объект потоко безопасным, но еще и запрещает компилятору оптимизировать участок кода. (прочитайте еще раз).
Повторял заметки, вот ответ:
Мониторинг и управление сборщиком мусора на объекте.
Вызываем статический метод Alloc объекта GCHandle, передаем ссылку на объект и тип GCHandleType в котором:
1) Weak - мониториг, обнаруживаем что объект более не доступен, финализатор мог выполниться.
2) WeakTrackResurrection - мониторинг, обнаруживаем что объект более не доступен, финализатор точно был выполнен (при его наличии).
3) Normal - контроль, заставляет оставить объект в памяти, память занятая этим объектом может быть сжата.
4) Pinned - контроль, заставляет оставить объект в памяти, память занятая этим объектом не может быть сжата (т.е. перемещена).