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次,它也能得到完全相同的结果
在大多数JVM实现中,该main方法实际上不是在JVM启动期间运行的第一个Java代码.
通常,完整JRE的许多部分本身都是用Java实现的.例如,类加载器机制的很大一部分是用纯Java实现的.它甚至可以用Java编写垃圾收集算法本身的一部分.
因此,即使您的应用程序根本没有创建垃圾,gc也可以收集这些系统类中的一些垃圾.
顺便说一句,你的应用程序创建了至少一个有资格在System.gc()被调用点进行垃圾收集的对象:String提到可用内存是动态构造的,而不是保存在变量中,因此它可以在gc-ed期间进行格式化.System.gc()呼叫.