什么是GC收集在这里?

JWh*_*hiz 8 java garbage-collection

这可能是非常基本的,但非常好奇.这是代码片段和输出

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

和输出

Free Memory (Before GC): 1859640
Free Memory (After GC): 1911768
Run Code Online (Sandbox Code Playgroud)

我很想知道GC收集的是什么,因为没有创建对象.

什么是被释放的记忆?(太52kb)


@JSauer - 即使运行100次,它也能得到完​​全相同的结果

Joa*_*uer 9

在大多数JVM实现中,该main方法实际上不是在JVM启动期间运行的第一个Java代码.

通常,完整JRE的许多部分本身都是用Java实现的.例如,类加载器机制的很大一部分是用纯Java实现的.它甚至可以用Java编写垃圾收集算法本身的一部分.

因此,即使您的应用程序根本没有创建垃圾,gc也可以收集这些系统类中的一些垃圾.

顺便说一句,你的应用程序创建了至少一个有资格在System.gc()被调用点进行垃圾收集的对象:String提到可用内存是动态构造的,而不是保存在变量中,因此它可以在gc-ed期间进行格式化.System.gc()呼叫.