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

Posted 菜鸟想长大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java GC是在什么时候,对什么东西,做了什么事情?相关的知识,希望对你有一定的参考价值。

1.新生代有一个Eden区和两个survivor区,首先将对象放入Eden区,如果空间不足就向其中的一个survivor区上放,如果仍然放不下就会引发一次发生在新生代的minor GC,将存活的对象放入另一个survivor区中,然后清空Eden和之前的那个survivor区的内存。在某次GC过程中,如果发现仍然又放不下的对象,就将这些对象放入老年代内存里去。

2.大对象以及长期存活的对象直接进入老年区。

3.当每次执行minor GC的时候应该对要晋升到老年代的对象进行分析,如果这些马上要到老年区的老年对象的大小超过了老年区的剩余大小,那么执行一次Full GC以尽可能地获得老年区的空间。

对什么东西:从GC Roots搜索不到,而且经过一次标记清理之后仍没有复活的对象。

做什么: 新生代:复制清理; 老年代:标记-清除和标记-压缩算法; 永久代:存放Java中的类和加载类的类加载器本身。

GC Roots都有哪些:

  1. 虚拟机栈中的引用的对象
  2. 方法区中静态属性引用的对象,常量引用的对象
  3. 本地方法栈中JNI(即一般说的Native方法)引用的对象。

    友情链接:Java GC的那些事(上)

    友情链接:Java GC的那些事(下)

    友情链接:CMS垃圾收集器介绍

以上是关于java GC是在什么时候,对什么东西,做了什么事情?的主要内容,如果未能解决你的问题,请参考以下文章

JVM虚拟机,我干了

GC详解

GC详解及Minor GC和Full GC触发条件总结

优秀的程序员更重视阅读源码,不看源码那是假的

Java虚拟机面试题精选

2016个人小结