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里。
     
     
     
     
     
  • 相关阅读:
    nginx文件类型错误解析漏洞
    js 获取URL中的参数并转换为对象
    postman
    php curl参数详解
    php 两变量值互换 方法
    PHP 命名空间与spl_autoload_register() 自动加载机制
    php命名大小问题
    PHP实现冒泡排序
    使用 PHPStorm + Xdebug 实现断点调试(二)
    TSPL学习笔记(2):过程和变量绑定
  • 原文地址:https://www.cnblogs.com/lnas01/p/5354116.html
Copyright © 2011-2022 走看看