Не забывайте, что у вас также есть стандартные ссылки (те, которые вы используете ежедневно). Это дает вам еще один уровень.
WeakReferences следует использовать, когда вас действительно не волнует, исчезнет ли объект, в то время как SoftReferences на самом деле следует использовать только тогда, когда вы используете обычную ссылку, но вы бы предпочли, чтобы ваш объект был очищен, а затем исчерпан. объем памяти. Я не уверен в деталях, но я подозреваю, что GC обычно отслеживает через SoftReferences, но не WeakReferences, когда определяет, какие объекты являются живыми, но при нехватке памяти также пропускает SoftReferences.
Я предполагаю, что .Net-дизайнеры почувствовали, что разница смущает большинство людей, или что SoftReferences добавляют больше сложности, чем они на самом деле хотели, и поэтому решили их опустить.
В качестве примечания, AFAIK PhantomReferences в основном предназначены для внутреннего использования виртуальной машиной и не предназначены для фактического использования клиентом.