这可能是非常基本的,但我很想知道。下面是代码片段和输出
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‘s)
@JSauer --即使运行100次,结果也完全相同
发布于 2010-08-05 16:51:23
在大多数JVM实现中,main
方法实际上不是在JVM启动期间运行的第一段Java代码。
通常,完整的JRE的许多部分都是用Java实现的。例如,类加载器机制的很大一部分是用纯Java实现的。它甚至可以用Java编写垃圾收集算法本身的部分内容。
因此,即使应用程序根本没有创建垃圾,gc也可能会从这些系统类中收集一些垃圾。
顺便说一句,您的应用程序至少创建了一个在调用System.gc()
时有资格进行垃圾收集的对象:提到空闲内存的String
是动态构造的,而不是保存在变量中的,因此很可能在System.gc()
调用期间对其进行gc编辑。
https://stackoverflow.com/questions/3417070
复制相似问题