借用了这里的一张图,如侵权请联系删除。


这次实战是《深入理解Java虚拟机》 P92 的例题,这里分析加强记忆。

参数

新生代:Parallel Scavenge收集器
老年代:ParOld收集器
具体参数学习请异步这里

-Xms20M:设置JVM最大可用内存/堆为20M。
-Xmx20M:设置JVM促使内存为20m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn10M:设置新生代内存大小10m,那么很容易算出老年代内存10m
-XX:SurvivorRatio = 8 : 新生代中的Eden和一个Survivor的比值8:1。因此Eden = 8M , Survivor = 1M,另一个Survivor = 1M
效果

Eden= 8M ,Survivor = 1M ;则用于存放对象的内存有9M,另外1M用于复制算法。
Old = 10M

执行代码
      byte[] a1,a2,a3,a4;int _1MB = 1024 * 1024;a1 = new byte[2 * _1MB];a2 = new byte[2 * _1MB];a3 = new byte[2 * _1MB];a4 = new byte[4 * _1MB];
GC日志
[GC (Allocation Failure) [PSYoungGen: 7110K->1008K(9216K)] 7110K->3402K(19456K), 0.0026423 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
HeapPSYoungGen      total 9216K, used 5344K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)eden space 8192K, 52% used [0x00000000ff600000,0x00000000ffa3c170,0x00000000ffe00000)from space 1024K, 98% used [0x00000000ffe00000,0x00000000ffefc040,0x00000000fff00000)to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)ParOldGen       total 10240K, used 6490K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)object space 10240K, 63% used [0x00000000fec00000,0x00000000ff2569b0,0x00000000ff600000)Metaspace       used 4740K, capacity 4930K, committed 5248K, reserved 1056768Kclass space    used 512K, capacity 561K, committed 640K, reserved 1048576K

由日志也可以看出计算是对的,Eden = 8M, Survivor(from) = 1M ; Old = 10M;

过程分析

a1、a2、a3的建立直接放在Eden区,此时Eden区占用了6M内存,Eden + Survivor剩下3M内存。
a4(4M)生成的时候,可用区域(3M)已经放不下了,因此引发了Minor GC,对照日志的第一行,此次回收把新生代的内存减少了6M,这是什么原因呢?
Minor GC时,启动了复制算法进行GC,而Survivor的内存放不下占用的6M了,因此内存担保把6M直接放到了老年代。a4很自然的放入了新生代。

最终结果:新生代放了a4(4M), 老年代放了a1、a2、a3(6M),也证明了对象优先在Eden分配

白话 垃圾回收之对象优先在Eden分配相关推荐

  1. jvm深入理解:内存分配与回收策略(优先在Eden分配、大对象直接进入老年代、长期存活的对象将进入老年代、动态对象年龄判定、空间分配担保)

    出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存. 象的内存分配,从 ...

  2. JVM--基础--09--内存分配策略--对象优先在Eden分配

    JVM–基础–09–内存分配策略–对象优先在Eden分配 1.测试 1.1.代码 /*** * @描述:对象优先在Eden分配* @author feiZhou* @date 2018年11月21日上 ...

  3. 《深入理解java虚拟机v3》对象优先在Eden分配 > 代码单3-7 新生代Minor GC

    对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配.当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. HotSpot虚拟机提供了-XX:+PrintGCDetai ...

  4. 深入JVM 对象优先在Eden分配

    前言:对象的内存分配,大方向讲,指的是对象在堆上分配,对象的主要分配发生在新生代的Eden区,当然少数分配在老年代,分配的规则并不是固定不变的,细节取决于具体的虚拟机实现. --对象优先在Eden区分 ...

  5. 【JVM】8_对象优先在Eden分配

    /*** VM参数有这些:* -verbose:gc : 表示输出虚拟机中GC的详细情况,输出像: [Full GC 168K->97K(1984K), 0.0253873 secs]* -Xm ...

  6. JVM的内存分配与回收策略实战——对象优先在Eden分配

    本文代码在测试时使用的垃圾收集器组合是Serial/Serial Old. 这里还需要介绍一些JVM的基本参数,本文中进行如下设置: -verbose gc 打印垃圾收集信息 -Xms20M 堆容量设 ...

  7. 16-内存分配与回收策略-对象优先分配Eden+大对象进老年代

    1.对象优先在Eden分配 大多数情况下, 对象在新生代Eden区中分配. 当Eden区没有足够空间进行分配时, 虚拟机将发起一次Minor GC.HotSpot虚拟机提供了-XX: +PrintGC ...

  8. JVM学习笔记-GC日志分析(对象优先在Eden区分配)

    前言 在进行GC日志分析前,先了解一下JVM虚拟机运行时数据区的主要划分: Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域 有各自的用途,以及创建和销毁 ...

  9. Java中的垃圾回收与对象生命周期

    转载自   Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...

最新文章

  1. 霸榜18年,作者连续20年获得微软MVP,这本SQL书凭什么成为畅销经典
  2. node环境搭建流程
  3. Angular之ngx-permissions的路由使用
  4. linux下iconv编码转换的用法
  5. 力扣-剑指offer 06 从尾到头打印链表
  6. 如何实现服务器启动自动创建日志
  7. win10笔记本电脑双系统 安装黑苹果系统macOS 小白黑苹果乐园下载资源简便安装黑苹果方式,非常详细,还有资源!
  8. 2022年java知识点汇总,面试大全!超级全面,逐步完善!
  9. springboot跨域处理
  10. ValueError: `generator` yielded an element of shape (2,) where an element of shape (?, ?) was expect
  11. 凸函数(convex)
  12. Java并发编程:Lock
  13. 计算机毕业设计 SSM+Vue农家乐管理系统 农家院住宿管理系统 民宿旅游预约管理系统 Java Vue MySQL数据库 远程调试 代码讲解
  14. 2016计算机2级试题,2016年计算机二级考试题及答案
  15. Vue移动端系列 => [07] 文章详情
  16. Bootstrap入门练手小项目,创建一个有侧边栏三级标题可页面跳转的导航
  17. OTT供应商揭示安全如何影响观众体验
  18. 睿尔曼 RM65-B 机械臂 WIN 示教软件测试
  19. w ndows10装什么浏览器,Windows10系统重装不了IE11浏览器如何解决
  20. linux看电视系统,在Linux系统下收看网络电视节目

热门文章

  1. 如何创建GPO并将其链接到域
  2. 草根在测试行业如何杀出一条血路-迷茫还是迷茫,我该做点什么?
  3. 密码学那些事———SHA-512及其C++实现
  4. 从苏宁电器到卡巴斯基(后传)第05篇:聊聊我对WannaCry产生的感慨
  5. #第六章 曲率二维表达的拟合应用 ​一、四维时空曲率的二维几何表达
  6. 继2021-02-09第一篇博文后
  7. netty实现安卓聊天系统(仿qq)
  8. Hardware/Firmware/Software的区别
  9. 【牛客】摩拜2018校招数据分析工程师笔试解析
  10. 判断iPhone 硬件设备型号