• Jvm年轻代复制到Survivor To区时,对象存放不下会发生什么?


    如果To区放不下会直接晋升到老年代

    oop DefNewGeneration::copy_to_survivor_space(oop old) {
      assert(is_in_reserved(old) && !old->is_forwarded(),
             "shouldn't be scavenging this oop");
      size_t s = old->size();
      oop obj = NULL;
     
      // Try allocating obj in to-space (unless too old)
      if (old->age() < tenuring_threshold()) {
        //如果对象的年龄低于tenuring_threshold,则该在to区申请一块同样大小的内存
        obj = (oop) to()->allocate_aligned(s);
      }
     
      // Otherwise try allocating obj tenured
      if (obj == NULL) {
        //如果如果对象的年龄大于tenuring_threshold或者to区申请内存失败
        //则尝试将该对象复制到老年代
        obj = _next_gen->promote(old, s);
        if (obj == NULL) {
          //复制失败
          handle_promotion_failure(old);
          return old;
        }
      } else {
        //to区中申请内存成功
        const intx interval = PrefetchCopyIntervalInBytes;
        Prefetch::write(obj, interval);
     
        //对象复制
        Copy::aligned_disjoint_words((HeapWord*)old, (HeapWord*)obj, s);
     
        //增加年龄,并修改age_table,增加对应年龄的总对象大小
        //注意此处是增加复制对象而非原来对象的分代年龄
        obj->incr_age();
        age_table()->add(obj, s);
      }
     
      //将对象头指针指向新地址
      old->forward_to(obj);
     
      return obj;
    }
     
    
  • 相关阅读:
    Bypass WAF
    一种简单的hook方法--LD_PRELOAD变量
    Linux C:access()时间条件竞争漏洞
    环境变量法提权
    sudo-tcpdump提权法
    asynico转载
    pychar 2020.1.2激活
    临时mysql 链接池
    python pip 使用阿里云镜像安装库
    zookeeper kafaka 临时保存
  • 原文地址:https://www.cnblogs.com/huisunan/p/14959949.html
Copyright © 2020-2023  润新知