zoukankan      html  css  js  c++  java
  • GC垃圾回收

    永久代不在堆内存里

    Java堆内存(heap):
        --是 JVM 用于分配 Java 对象的内存,包含活动对象和不可用对象 
        --堆大小通常是在服务器启动时使用 java 命令中的 –Xms(最小) –Xmx(最大)标志来定义。
    Permanent区:
        --指内存的永久保存区域
        --是Sun JDK和HP JDK用来加载类(class)和Meta信息的专门的内存区
     
     
     
    整块堆区域分为Young Generation、Tenured Generation
    Young区又分为:Eden、Survivor Space
     
     
     
    垃圾回收(GC)的产生过程
         1)新生成的对象在Eden区完成内存分配
         2)当Eden区满了,再创建对象,会因为申请不到空间,触发minorGC,进行young(eden+1survivor)区的垃圾回收。(为什么是eden+1survivor:两个survivor中始终有一个survivor是空的,空的那个被标记成To Survivor)
         3)minorGC时,Eden不能被回收的对象被放入到空的survivor(也就是放到To Survivor,同时Eden肯定会被清空),另一个survivor(From Survivor)里不能被GC回收的对象也会被放入这个survivor(To Survivor),始终保证一个survivor是空的。(MinorGC完成之后,To Survivor 和 From Survivor的标记互换)
         4)当做第3步的时候,如果发现存放对象的那个survivor满了,则这些对象被copy到old区,或者survivor区没有满,但是有些对象已经足够Old(通过XX:MaxTenuringThreshold参数来设置),也被放入Old区
         5)当Old区被放满的之后,进行完整的垃圾回收,即 Full GC
         6)Full GC时,整理的是Old Generation里的对象,把存活的对象放入到Permanent Generation里。
     
     
     
     
     
  • 相关阅读:
    产品微谈
    SVN回滚机制
    super究竟是个啥?
    PM12条
    CocoaPods初体验
    UIView局部点击
    Memory cycles about Block
    About "self"
    openfire学习(一)
    WPF菜单和布局(2)
  • 原文地址:https://www.cnblogs.com/lnas01/p/5354116.html
Copyright © 2011-2022 走看看