【笔记】深入理解 java 虚拟机---内存回收
2017-12-22 22:10
369 查看
1 对象优先在eden 上分配。配置参数: jvm初始分配的内存最大内存(-Xmx20m )最小堆内存(-Xms20M )年轻带内存 ( -Xmn10M ) Eden 和 Suriv 的关系8:1:1( -XX:SuriviorRatio=8) 新生代 GC 。比较频繁。作用于新生代。 Mionor GC老年代GC。 发生在老年代。发生一次Major GC,伴随着一次 Mionor GC。2 大对象直接进入老年代。-XX:PretenureSizeThreshold 参数。设置该参数的值,如果对象的内存大于该值,直接在老年代分配。该参数只适用于 Serial 和 PraNew 。 不支持 Prallel Scavenge. 但是我用 ps 收集器测下来,是可以直接进入老年代的。3 长期存活对象将进入老年代。当对象 经历一次GC后,如果没有被回收,并且在 Survivor能够存下。则 它的age计数器+1。 可以通过 -XX:MaxTenuringThreshold 设置。不设置 默认 15。 及对象的年龄计数器达到15后进入老年代。4 对象的动态进入 老年代。
当 surivior 里的 内存,存在同一个年龄内存之和 是其surivior 内存大小的一半时 所有大于和等于这个年龄的对象都会被 存放到 老年代。
这个时候将不会在去查看 -XX:MaxTenuringThreshold
这个参数。
5 内存担保。
HandlePromotionFailure
这个参数 ,决定虚拟机是否要担保担保 是来干什么的?? 我们知道 新生代内存有复制算法。 就是使用 eded 和 2 块 survivor 区域。 其中有一块 survivor 区域是不存放分配对象的。 只有当进行Minor GC, 这个区域会把所有存货的对象放到其上面,进行年龄叠加。 所以,会存在,Survivor 内存小于存货对象的内存。这时候,内存将直接在老年代分配。如果 不开担保?每次 survivor 区内存不够都会进行 GC.。如果开担保?内存不够就去老年代拿,所以可以省掉一部分不是很必要的GC。 所以,这个参数,还是
HandlePromotionFailure开了好。
相关文章推荐
- 深入理解Java虚拟机笔记---内存分配与回收策略
- 深入理解Java虚拟机笔记---内存分配与回收策略
- Java内存回收知识(读书笔记)--深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)2.2~2.3
- 第3章 垃圾收集器与内存分配策略--《深入理解 Java 虚拟机》笔记
- Java内存回收知识(读书笔记)--深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)--2.2
- 第2章 Java内存区域与内存溢出异常--《深入理解 Java 虚拟机》笔记
- 深入理解Java虚拟机笔记--JVM内存模型及溢出问题总结
- 深入理解java虚拟机学习 笔记 第二章 java 内存区域和内存溢出异常
- 深入理解JVM虚拟机学习笔记(三)内存分配和回收策略
- 深入理解Java虚拟机笔记---内存区域
- 深入理解Java虚拟机笔记---内存模型
- 深入理解Java虚拟机—学习笔记(1)Java内存区域与内存溢出异常
- 深入理解JVM虚拟机 第二章笔记 Java内存区域与内存溢出异常
- 深入理解Java 虚拟机(周志明)笔记(三)——Java对象在内存中的存储与访问
- 深入理解Java虚拟机笔记---原子性、可见性、有序性
- 深入理解JAVA虚拟机笔记 - 04
- 笔记:深入理解JVM 第3章 垃圾回收器与内存分配策略
- 深入理解Java 虚拟机(周志明)笔记(一)——Java虚拟机发展史
- 深入理解Java虚拟机笔记---方法调用http://www.tuicool.com/articles/vQVzIje
- 深入理解 java 虚拟机笔记 -01