zoukankan      html  css  js  c++  java
  • 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策略是:标记整理法。年老代的容量很大,使用停止复制法的话,效率会比较低。标记整理法,是先标记存活的对象,然后把这些对象在向一段移动,保证内存的连续。

  • 相关阅读:
    vue通过webpack打包后怎么运行
    vue中请求本地的json数据
    electron打包成桌面应用程序的详细介绍
    Web应用架构-Services
    Web应用架构-Full-text Search Service
    Web应用架构-Job Queue & Servers
    Web应用架构-Caching Service
    Web应用架构-Database
    设计模式:设计模式概述&JDK中的应用
    常见面试问题总结
  • 原文地址:https://www.cnblogs.com/afraidToForget/p/10120380.html
Copyright © 2011-2022 走看看