Что GC собирает здесь?

Это могло бы быть довольно основным, но было очень любопытным знать. Вот фрагмент кода и вывод

public class PlainSystemGC {

    public static void main(String ...strings) {

        System.out.println("Free Memory (Before GC): " + Runtime.getRuntime().freeMemory());

        System.gc();

        System.out.println("Free Memory (After GC): " + Runtime.getRuntime().freeMemory());
    }
}

и вывод

Free Memory (Before GC): 1859640
Free Memory (After GC): 1911768

Мне интересно знать то, что является GC, собирающимся здесь, так как никакие объекты не создаются.

Какова память, это освобождается? (и это также 52 КБ)


@JSauer - Это дает Точно те же результаты даже если выполненный 100 раз

8
задан JWhiz 5 August 2010 в 16:57
поделиться

1 ответ

В большинстве реализаций JVM метод main на самом деле не является первой частью кода Java, которая выполняется во время запуска JVM.

Обычно многие части полной JRE сами реализованы на Java. Например, большая часть механизма загрузчика классов реализована на чистом Java. Возможно, даже часть алгоритма сборки мусора может быть написана на Java.

Из-за этого в системных классах уже может быть некоторый мусор, который gc может собрать, даже если ваше приложение вообще не создавало никакого мусора.

Кстати, ваше приложение создает, по крайней мере, один объект, который подлежит сборке мусора в момент вызова System.gc(): String, в котором упоминается свободная память, создается динамически и не хранится в переменной, поэтому он вполне может быть сгенерирован во время вызова System.gc().

9
ответ дан 5 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: