深入理解JVM虚拟机学习笔记(三)内存分配和回收策略
2017-02-05 19:44
696 查看
大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。
新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多具有朝生夕灭的特性,所以Minor GC 非常频繁,一般回收速度也比较快。
老年代GC(Full GC/Major GC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC。非绝对。
虚拟机提供了一个-XX:PretenureSizeThreshold参数,另大于这个设置值的对象直接在老年代中分配,这样做的目的是避免在Eden区和两个Survivor区之间出现大量的内存拷贝。
新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多具有朝生夕灭的特性,所以Minor GC 非常频繁,一般回收速度也比较快。
老年代GC(Full GC/Major GC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC。非绝对。
大对象直接进入老年代
所谓大对象是指需要大量连续内存空间的Java对象。最典型的大对象就是那种很长的字符串和数组。虚拟机提供了一个-XX:PretenureSizeThreshold参数,另大于这个设置值的对象直接在老年代中分配,这样做的目的是避免在Eden区和两个Survivor区之间出现大量的内存拷贝。
长期存活的对象将进入老年代
虚拟机采用分代收集的思想来管理内存,那么内存回收时就必须识别哪些对象应当放在新生代,哪些对象应当放在老年代,为了这一点,虚拟机给每个对象定义了一个对象年龄计数器,如果对象在Eden区出生,并经历第一次Minor GC后仍然存活,并且能被Survivor容纳的话,就被移动到Survivor区,并将对象年龄设为1,对象在Survivor区中每次Minor GC都没有被回收掉,那么年龄加1,当年龄增加到一定程度,默认是15岁,则被晋升到老年代中。对于年龄阈值可以通过参数-XX:MaxTenuringThreshold来设置。动态对象年龄判定
上述并不一定总是要求。如果在Survivor中相同年龄对象所占空间总和大于Survivor空间的一半,年龄大于或者等于该年龄的对象直接进入老年代。无需等到XX:MaxTenuringThreshold设置的年龄。空间分配担保
相关文章推荐
- 深入理解Java虚拟机笔记---内存分配与回收策略
- 笔记:深入理解JVM 第3章 垃圾回收器与内存分配策略
- 深入理解Java虚拟机笔记---内存分配与回收策略
- 【深入理解JVM】:内存分配与回收策略
- 深入理解JVM--第三章--内存分配与回收策略
- 深入理解Java虚拟机JVM高级特性与最佳实践阅读总结——第三章垃圾收集器与内存分配策略
- 深入理解JVM笔记二---垃圾收集器及内存分配策略
- 第3章 垃圾收集器与内存分配策略--《深入理解 Java 虚拟机》笔记
- Java内存区域分配、存储、垃圾回收策略与回收机制(深入JVM虚拟机)
- 【深入理解jvm】内存分配与回收策略
- jvm学习笔记二(java内存分配策略和回收策略)
- 深入理解 JVM 系列:内存分配与回收策略
- 【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出
- 深入理解JVM虚拟机学习笔记(—)内存区域与内存溢出异常
- 深入理解JVM(第三章 垃圾回收器与内存分配策略)
- JVM学习笔记-内存分配与回收策略
- 深入理解C指针学习笔记---多级指针的内存分配问题(五)
- [课本划重点]深入理解jvm-第3章 垃圾收集器与内存分配策略(3)
- 深入学习Java JVM - 垃圾收集器与内存分配策略
- 深入Java虚拟机学习笔记 - 内存分配和回收策略