JVM Generations1Java GC小结刨根问底探索分析ContentsJVM Generations ...................................................................................... 1Garbage Collectors ................................................................................... 2GC过程 ................................................................................................ 3JVM Generations的堆被划分成不同的区域::存放新创建的对象,当这个区域占满的时候,会触发,这时候存活的对象会被标记年龄,最终会移动到。:存放存活的比较久的对象。当存活的对象年龄到达设置的阈值后,就会被移动到这里来。当这个区域满了的时候,会触发。:存放一些运行所需的元数据,例如类的信息等。的时候也包括对这个区域的。其中,和都是的,即当触发的时候,所有的程序线程都会停止等待完成。通常会比快很多,因为会遍历所有的存活对象。其中,又被划分成,其中占了绝大部分的空间。当满的时候,会将存活对象移动到其中一个中,两个是为了避免内存碎片,每次将存活的对象(以及上一个)移动到另一个中。 Garbage Collectors2通过和插件可以很直观的看到的过程java -Xmx50m \-XX:-PrintGC \-XX:+PrintHeapAtGC \-XX:MaxTenuringThreshold=10 \-XX:+UseConcMarkSweepGC \-XX:+UseParNewGC TestGCGarbage CollectorsSerial GC使用算法进行,单线程的进行,适合单核和在客户端允许的程序。Parallel GC(throughput collector)多线程进行Concurrent Mark Sweep (CMS) Collector在程序运行的时候并发的进行,以最大限度减少停止时间G1(Garbage-First) Garbage Collector的替代品其中存在并行和并发的区别,并行是指垃圾收集器多个线程同时工作,但此时用户线程依然是停止等待的;而并发是指在用户线程工作的同时,垃圾收集器同时执行。 GC过程3GC过程CMS收集器的步骤:标记老年代中的对象是否可达,包括可以从新生代中到达的将划分成一些相同大小的区块,但是没有限制不同代的大小。