GC的一个面试题

今天看到一个gc面试题,觉得挺有意思的,写下来,给自己留个印象

GC是在什么时候,对什么东西,做了什么事情?

1、什么时候

  a、系统空闲的时候

  b、系统自身决定,不可预测的时候调用gc

  c、eden区满了调用minor gc(),升级到老年代的对象大于老年代剩余空间调用full gc()

  d、程序员不能具体控制时间,系统在不可预测的时间调用System.gc()函数的时候;当然可以通过调优,用NewRatio控制newObject和oldObject的比例,用MaxTenuringThreshold 控制进入oldObject的次数,使得oldObject 存储空间延迟达到full gc,从而使得计时器引发gc时间延迟OOM的时间延迟,以延长对象生存期。

2、对什么东西

  a、不使用的对象

  b、超出作用域的对象,计步器为空的对象

  c、从gc root开始搜索,搜不到的对象

  d、超出了作用域或引用计数为空的对象;从gc root开始搜索找不到的对象,而且经过一次标记、清理,仍然没有复活的对象。

3、做什么

  a、删除不使用的对象,腾出内存空间

  b、随便说说一些停止线程,运行finalize的说明

  c、说说eden区和from suvivor和to suvivor干啥用的,老年代中的标记清理和复制清理等等

  d、删除不使用的对象,回收内存空间;运行默认的finalize,当然程序员想立刻调用就用dipose调用以释放资源如文件句柄,JVM用from survivor、to survivor对它进行标记清理,对象序列化后也可以使它复活。

是不是看到上面的答案,发现好多坑。

原文地址:https://www.cnblogs.com/gudulijia/p/6883650.html