Если вы действительно хотите, чтобы память высвобождалась как можно быстрее, вам нужно искать опции GC, а не код.
Детальный анализ опций GC для этой цели выходит за рамки того, что может здесь уместно разместиться, но, в частности, новый GC Shenandoah можно настроить так, чтобы он был намного более агрессивным в освобождении памяти, чем G1 или одновременная отметка / подметать, так что это, вероятно, то, что вы хотели бы использовать. Вы можете указать это с помощью -XX:+UseShenandoahGC
. (На данный момент это специфично для OpenJDK и является экспериментальным, но если вам нужно поведение, к которому вы стремитесь, то это то, что вам нужно.)
Для быстрого выпуска, вы можете использовать небольшое значение для ShenandoahUncommitDelay
и ShenandoahGuaranteedGCInterval
. Меньшие значения здесь (в широком смысле) будут запускать ГХ чаще и агрессивнее, следовательно, с использованием большего количества циклов ЦП - но в результате вы получите эффект, что память будет освобождена невероятно быстро по сравнению с предыдущими воплощениями ГХ.
Если вы просто хотите убедиться, что память освобождена, чтобы она подходила для быстрого сбора мусора, тогда вам просто нужно убедиться, что все ссылки на этот StringBuilder
установлены на ноль как можно скорее возможность. Однако даже в этом случае я рекомендую вам профилировать и проверить, нужно ли вам делать это явно - во многих случаях JVM достаточно умна, чтобы помечать объекты как подходящие для GC, даже если они технически все еще находятся в области действия ( до тех пор, пока он может видеть, что на них больше нет ссылок для остальной части этой области.)