Умный сборщик мусора для совместного использования поддиапазонов массивов?

В популярный вопрос о том, почему подстрока принимает O (n) в C # , один из основных предоставленных ответов утверждал, что если большой массив были выделены и подстроки вычислены, если новые строки просто ссылаются на небольшой фрагмент массива, сборщик мусора не сможет вернуть массив символов, содержащий большую строку, даже если исходная строка больше не ссылается.

Это кажется совершенно правильным ответом, но кажется, что теоретически можно построить сборщик мусора для массивов, который позволил бы собирать мусор для большей части массива, оставив при этом небольшой подмассив, который все еще используется. Другими словами, если бы существовал массив из 50 000 элементов, из которого все еще использовался только небольшой фрагмент из 100 элементов, сборщик мусора мог бы разделить массив на три части - элементы перед фрагментом из 100 элементов, 100-элементный фрагмент. сам срез и элементы после среза из 100 элементов - а затем сборщик мусора первый и последний из этих частей.

Мой вопрос заключается в том, действительно ли какие-либо языковые реализации используют такой сборщик мусора, или он существует только теоретически . Кто-нибудь знает пример реализации языка, в котором есть такой сборщик мусора?

12
задан Community 23 May 2017 в 11:58
поделиться