Моя первая реакция была: почему бы и нет? Я не могу себе представить, что вы хотите сделать что-то столь же неясное, как просто оставить неиспользуемый кусок в куче, чтобы найти его позже. Как будто четырехбайтовый указатель на кучу был слишком большим, чтобы его можно было отследить, чтобы отслеживать этот кусок.
Таким образом, проблема заключается не в том, чтобы выделять память, на которую нет ссылок, а в намеренном удалении памяти, которая все еще используется. Поскольку сборка мусора выполняет функцию пометки свободной памяти в какой-то момент, кажется, что мы должны просто иметь возможность вызывать альтернативную последовательность инструкций для удаления этого конкретного фрагмента памяти.
Однако проблема заключается здесь:
String s = "Here is a string.";
String t = s;
String u = s;
junk( s );
На что указывают t
и u
? В строгой системе отсчета t
и u
должны быть null
. Таким образом, это означает, что вам нужно не только сделать ссылку , считающую , но, возможно, отслеживающую .
Тем не менее, я вижу, что вы должны покончить с s
на этом этапе в вашем коде. Таким образом, junk
может установить ссылку на null и передать ее методу с помощью своего рода кода приоритета. Gc может быть активирован для ограниченного запуска, и память освобождается, только если она недоступна. Таким образом, мы не можем явно освободить что-либо, что кто-то закодировал, чтобы использовать каким-то образом снова. Но , если s
является единственной ссылкой, то блок освобождается.
Итак, я думаю, что это будет работать только с ограниченной приверженностью явной стороне.