• Java 年轻代、年老代、GC


    一篇关于gc的文章

    http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html

    自己的笔记:

    JVM是用c语言写的。一般说的JVM是HotSpot。

    GC是垃圾回收的意思。

    Java的GC对不同存活时长的对象才用不同的回收策略。

    存活时间短的对象使用新生代存储,存活时间长的对象使用年老代存储。

    一般情况下,一个对象刚创建的时候被存放在年轻代,在年轻代经过几次gc后仍然存活,则进入年老代。特殊情况下:如果一个对象很大,也可以直接进入年老代。有的建议说需要避免创建大的对象。年老代的空间很大,当一个大的对象在老年代gc的时候,会引发整个年老代的gc。对于年老代引用年轻代对象的情况,年老代中会维护一个大小为512byte的card table。年轻代gc的时候可以查询这里,而不用查询全部年老代。

    年轻代的gc策略是:停止复制清理法。年轻代具体分为伊甸区、存活区0,存活区1;gc时候将仍然存活的对象放入一个存活区中,清空另一个存活区和伊甸园区。如果某个对象经过了n次gc依然存活,或者存活的对象超过了存活区的容量,就会发生从年轻代到年老代的复制。 停止复制清理法需要在回收前停止其他所有线程的执行,这是新生代收集器优化的重点(垃圾收集器是gc的具体实现)。

    年老代的gc策略是:标记整理法。年老代的容量很大,使用停止复制法的话,效率会比较低。标记整理法,是先标记存活的对象,然后把这些对象在向一段移动,保证内存的连续。

  • 相关阅读:
    shell 实现word count
    jvm 参数调优
    Java注解处理器(转)
    JVM -XX: 参数介绍(转)
    如何在Linux下重命名多个文件
    Kafka学习之broker配置(0.8.1版)(转)
    linux 历史命令用法(转)
    hive-site.xml 参数设置
    Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1(转)
    正则表达式通过Unicode属性匹配
  • 原文地址:https://www.cnblogs.com/afraidToForget/p/10120380.html
Copyright © 2020-2023  润新知