首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >这里收集的是什么?

这里收集的是什么?
EN

Stack Overflow用户
提问于 2010-08-05 16:44:56
回答 1查看 231关注 0票数 8

这可能是非常基本的,但我很想知道。下面是代码片段和输出

代码语言:javascript
代码运行次数:0
运行
复制
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());
    }
}

以及输出

代码语言:javascript
代码运行次数:0
运行
复制
Free Memory (Before GC): 1859640
Free Memory (After GC): 1911768

我想知道GC在这里收集的是什么,因为没有创建对象。

被释放的内存是什么?(也就是52‘s)

@JSauer --即使运行100次,结果也完全相同

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-05 16:51:23

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

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

因此,即使应用程序根本没有创建垃圾,gc也可能会从这些系统类中收集一些垃圾。

顺便说一句,您的应用程序至少创建了一个在调用System.gc()时有资格进行垃圾收集的对象:提到空闲内存的String是动态构造的,而不是保存在变量中的,因此很可能在System.gc()调用期间对其进行gc编辑。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3417070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档