美文网首页
垃圾回收And对象分配

垃圾回收And对象分配

作者: IAmWhoAmI | 来源:发表于2016-07-11 13:06 被阅读4次

复制法中:
Eden :
from :
to :

space_require :需要分配的空间
.rest 剩余的空间
.put() 放入
.size 占据空间大小

history_space_array : 每次今生到老年代的空间大小

if( space_require  < Eden.rest){
    Eden.put(space_require)
}else if(space_require < from.require){
    from.put(space_require)
}else{
    #history_space_array : 每次今生到老年代的空间大小  
    if(history_space_array.average > old.rest){
        if(HandlePromotionFailure is allowed){//允许担保失败
            MinorGC_允许担保失败();
        }else{
            FullGC();
            if( space_require  < Eden.rest){
                Eden.put(space_require)
            }else if(space_require < from.require){
                from.put(space_require)
            }else{
                if(old.rest > alive.space){
                    old.put(alive);
                }else{
                    throws new OutOfMemoryException();
                }
            }
    }else{
        MinorGC();
    }
}
MinorGC(){
    alive = Eden.alive + from.alive
    for(object in alive){
        object.age++;
        if(object.age>=limitAge){
             if(old.rest > object.space ){
                old.put(alive);//
            }else{
                throw OOMException();
            }
        }else if(object.size < to.rest){
            to.put(object)
        }else if(old.rest > object.space ){
                old.put(alive);//
        }else{
            throw OOMException();
        }
    }
    Eden.clear()
    from.clear()
    from,to= to,from; //二者交换
}
    }
MinorGC_允许担保失败(){
    //alive存活的对象
    alive = Eden.alive + from.alive
    for(object in alive){
        object.age++;
        if(object.age>=limitAge){
             if(old.rest > object.space ){
                old.put(alive);//
            }else{
                MinorGC2FullGC();
            }
        }else if(object.size < to.rest){
            to.put(object)
        }else if(old.rest > object.space ){
                old.put(alive);//
        }else{
            MinorGC2FullGC();
        }
    }
    Eden.clear()
    from.clear()
    from,to= to,from; //二者交换
}
MinorGC2FullGC(){
       FullGC();//此时发生一次全GC
       if(old.rest > object.space){
           old.put(alive);
       }else{
           throws new OutOfMemoryException();
       }
}

相关文章

  • 面向对象

    1. 垃圾回收机制 垃圾回收机制:内存对象的管理,包括对象空间的分配和释放。 对象空间的分配:使用new关键字创建...

  • 垃圾回收And对象分配

    复制法中:Eden :from :to : space_require :需要分配的空间.rest 剩余的...

  • Android 对象池实现原理和简单使用

    了解Android 垃圾回收 判断对象是否可以被回收垃圾收集算法内存分配与回收策略 GC频繁原因 Memory C...

  • 01垃圾回收机制

    垃圾回收(Garbage Collection,GC) 垃圾回收就是释放垃圾占用的空间 内存的动态分配和垃圾回收,...

  • Summary

    JVMJVM内存分区垃圾回收策略对象在堆上的分配策略判断执行Minor GC? Full GC?对象引用类型 反射...

  • JVM学习四(内存分配与回收策略)

    (一)内存分配与回收策略 给对象分配内存、回收分配给对象的内存1、对象优先在Eden分配 通过-XX:+Print...

  • JVM垃圾回收机制

    1.什么是gc ? gc 垃圾收集回收 是对jvm的内存进行标记和回收,将内存中不再使用的对象进行回收,以便分配给...

  • 垃圾收集器与内存分配策略(一)

    垃圾收集器与内存分配策略之--对象已死吗 GC关注的问题其实就是三个: 哪些内存可以被回收 何时回收 如何回收 所...

  • 关于Java中的四种引用方式

    java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。 ja...

  • php高级--PHP的垃圾收集机制是怎样的?

    对象引用计数器机制回收: php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计...

网友评论

      本文标题:垃圾回收And对象分配

      本文链接:https://www.haomeiwen.com/subject/cixjjttx.html