В этот популярный вопрос о том, почему подстрока принимает O (n) в С#, в одном из основных ответов утверждалось, что если был выделен большой массив и подстроки, вычисленные если новые строки просто ссылаются на небольшой кусочек массива, сборщик мусора не сможет вернуть массив символов, содержащих большую строку, даже если исходная строка больше не ссылается.
Это кажется вполне правильным ответом, но, как представляется, теоретически можно построить сборщик мусора для массивов, который позволил собрать большую часть массива, оставив после себя какой-то небольшой подмассив, который все еще используется. Другими словами, если бы существовал массив из 50 000 элементов, из которых только небольшой срез 100 элементов использовался, сборщик мусора мог разбить массив на три части - элементы перед 100-элементным срезом, 100-элементный срез и элементы после 100-элементного среза - и затем мусор собирает первую и последнюю из этих частей.
Мой вопрос заключается в том, используют ли какие-либо языковые реализации этот вид сборщика мусора или существует ли он только в теории. Кто-нибудь знает пример реализации языка, который имеет сборщик мусора, подобный этому?