java对象在堆内存中的分配原则(参考)
2017-03-21 00:00
169 查看
对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。
大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。
长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达到阀值对象进入老年区。
动态判断对象的年龄。如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。
空间分配担保。每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小,如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于检查HandlePromotionFailure设置,如果true则只进行Monitor GC,如果false则进行Full GC。
大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。
长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达到阀值对象进入老年区。
动态判断对象的年龄。如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。
空间分配担保。每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小,如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于检查HandlePromotionFailure设置,如果true则只进行Monitor GC,如果false则进行Full GC。
相关文章推荐
- java对象在堆内存中的分配原则
- HotSpot JVM 对象的内存结构和对象成员的堆内存分配原则
- Java中的堆内存与栈内存分配浅析
- 61条Java面向对象设计的经验原则
- java模式笔记 (二)—— 对象原则
- 61条Java面向对象设计的经验原则
- 61条Java面向对象设计的经验原则,成为高级程序员必备
- 对Object Pascal编译器给类对象分配堆内存细节的一种大胆猜测
- Java对象的生命周期-内存分配、回收内存
- 【原创】深入理解Java堆内存分配策略(Xmx和Xms)
- java面向对象6大原则2
- 【JAVA设计模式-第一课】面向对象特性及原则回顾
- java基础之对象的引用和引用的对象、equals和==的区别,栈内存和堆内存的存储区别
- java 对象分配与垃圾回收一览图
- 61条Java面向对象设计的经验原则
- java程序运行时,对象的放置和内存的分配
- Java新手备忘录[1]:对象数组的每一个成员都要单独分配空间
- java数组创建了指针,而没有为对象分配空间
- java面向对象设计的六大原则<转>
- jobject AllocObject(JNIEnv *env, jclass clazz); 分配新 Java 对象而不调用该对象的任何构造函数。返回该对象的引用