ToB企服应用市场:ToB评测及商务社交产业平台

标题: 4 内存分配和回收策略 [打印本页]

作者: 莱莱    时间: 2022-10-17 22:18
标题: 4 内存分配和回收策略
目录

扩展:Gc日志分析工具
GC日志分析工具-GCEasy
GC日志分析神器-GCEasy详解
1 自动内存管理

Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:分配与回收
Java的对象内存分配的一般规则:
本章节所以用的JVM环境为:
  1. JDK8默认:
  2.     垃圾收集器:
  3.         新生代使用 Parallel Scavenge:标记-复制算法
  4.         老年代配合使用的是 Serial Old:标记-整理算法
复制代码
2 对象优先在Eden分配

2.1 总结

2.2 验证过程

jvm参数
  1. -Xms30M -Xmx30M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy -XX:+PrintCommandLineFlags -XX:+PrintGCDateStamps
  2. -Xms30M    #固定堆内存大小为30M
  3. -Xmx30M
  4. -Xmn10M   #新生代为分配10M,实际可用为9M
  5. -XX:+PrintGCDetails
  6. -XX:SurvivorRatio=8
  7. -XX:-UseAdaptiveSizePolicy  #固定8:1:1
  8. -XX:+PrintCommandLineFlags  #打印运行时jvm参数
  9. -XX:+PrintGCDateStamps
复制代码
特别注意:
未手动分配空间前,运行main方法占用:1476KB,即1.44MB

测试代码
  1. public class GcDemo {
  2.     public static void main(String[] args) {
  3.         byte[] a1 = new byte[5 * 1024 * 1024];
  4.         byte[] a2 = new byte[2 * 1024 * 1024];
  5.     }
  6. }
复制代码
GC日志及分析

  1.    PSYoungGen      total 9216K, used 2770K      #新生代已使用2770K包含:对象a2+剩余未回收的640K
  2.      eden space 8192K, 26% used     # eden区总大小8192K,已使用26%,包含对象a2
  3.      from space 1024K, 62% used   #S0总大小1024K,已使用62%,包含 剩余未回收的640K
  4.      to   space 1024K, 0% used      #S1总大小1024K,已使用0%
  5. ParOldGen       total 20480K, used 5128K   #对象a1被搬移到老年代
  6.     object space 20480K, 25%
复制代码
综上
用图例所示

3 大对象直接进入老年代

3.1 总结

3.2 验证过程

如上:并未触发gc,而是直接分配在老年代
4 长期存活的对象将进入老年代

4.1 总结

4.2 验证过程

todo
5 动态对象年龄判定

5.1 总结

5.2 验证过程

todo
6 空间分配担保

6.1 总结

6.2 验证过程

todo

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4