关于 GC 处理的深入分析

最近在看《第一行代码》看到关于GC机制的,分享一下,随时可以复习。

GC 在Java 中的核心功能就是对内存中的对象进行内存的分配与回收,所以对于 GC 的理解不要局限于只是进行垃圾收集,还应该知道 GC 决定了内存的分配 。最常见 的情况就是当开发者创建一个对象后, GC 就会监视这个对象的地址、大小和状态 。对象的引用会保存在栈内存( Stack )中,而对象的具体内容会保存在堆内存 (Heap )中 。GC 检测到一个堆中的某个对象不再被栈所引用时,就会不定期的对 这个堆内存中保存的对象进行回收。 有了 GC 的帮助,开发者不用再考虑内存回收的 事情, GC 也可以最大限度地帮助开发者防止内存泄露。
在Java 中针对垃圾收集也提供了多种不同的处理分类。
(1 )引用计数:一个实例化对象,如果有程序使用了这个引用对象,引用计数加1 ,当一个对象使用完毕,引用计数减 1,当引用计数为0 时,则可以回收。
( 2)跟踪收集:从 root set (包括当前正在执行的线程、全局或者静态变量、 JVM Handles JNDI Handles )开始扫描有引用的对象 ,如果某个对象不可到达,则 说明这个对象已经死亡( dead ),则 GC 可以对其进行回收。也就是说 :如果 对象A引用了B对象的内存,那么虚拟机会记住这个引用路径,而如果一个对象没有在路径 图中,则就会被回收。
( 3)基于对象跟踪的分代增量收集:所有的对象回收要根据堆内存的结构划分来 进行收集,具体如下
①基于对象跟踪:是由跟踪收集发展而来的,分代是指对堆进行了合理的划分, JVM 将整个堆分为以下三代。
A. YoungGen (新生代,使用 nor GC 回收) YoungGen 区里面的对象的生命周期比较短, GC 对这些对象进行回收的时候采用复制拷贝算法。
– young: 又分为 eden survivorl ( from space )、 survivor2 ( to sapce)。 eden 是在每个对象创建的时候才会分配的空间,当时eden 无法分配时,则会自动触发 一次 Minor GC 。当 GC 每次执行时都会将 eden 空间中存活的对象和 survivo 中的 对象拷贝到 survivor2 中,此时 eden 和survivorl 的空间内容将被清空。当 GC 执行 下次回收时将 eden 和survivorl2 中的对象拷贝到 surivorl 中,同时会清空 eden和 survivor2 空间。按照此类的顺序依次执行,经过数次回收将依然存活的对象复制到 OldGen (年老代)区
B. OldGen (年老代,使用 Major GC 回收): 当对象从 YoungGen 保存到 OldGen 后,会检测 OldGen 的剩余空间是否大于要晋升对象的大小,此时会有以下 种处理形式。
– 如果小于要保存的对象,则直接进行一次 Full GC (对整个堆进行扫描和回收,但是 Majo GC 除外),这样就可以让 OldGen 腾出更多的空间。 然后执行 Minor GC ,把 YoungGen 空间的对象复制到 Old Gen 空间。
– 如果大于要保存的对象,则会根据条件( HandlePromotionFailur 配置:是 否允许担保分配内存失败,即整个 OldGen 空间不足,而 YoungG en 空间中 Eden 和Survivo对象都存活的极端情况。)进行 Minor GC和 Full GC 回收。
C. PermGen (持久区) 要存放加载进来的类信息,包括方法 、属性、对象池 等,满了之后可能会引起 Out Of Memory 错误
MetaSpace (元空间):持久化的替换者,直接使用主机内存进行存储。
②增盘收集:不是每一次都全部收集,而是累积的增量收集。

Java GC机制相关推荐

  1. java gc机制新区域旧屋_Java 内存回收机制——GC机制-Go语言中文社区

    一.Java GC 概念说明 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾 ...

  2. 老年代的更新机制_如何理解Java GC机制

    Java GC机制 简单来说就干了3件事 确定哪些内存需要回收,确定什么时候需要执行GC,如何执行GC 确定哪些内存需要回收 垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还&quo ...

  3. 98. 我说说你对Java GC机制的理解?

    我说说你对Java GC机制的理解? 写在前面 JVM的运行数据区 1.方法区 2.堆( Heap) 3.栈( Stack) 4.PC寄存器 5.本地方法栈 初识GC Marking Normal D ...

  4. 给我说说你对Java GC机制的理解?

    写在前面 使用Java快一年时间了,从最早大学时候对Java的憎恶,到逐渐接受,到工作中体会到了Java开发的各种便捷与福利,这确实是一门不错的开发语言.不仅是 Intellij开发Java程序的爽快 ...

  5. 【98期】面试官:给我说说你对Java GC机制的理解?

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 5.5 分钟. 来自:windblog.cn/java/2019/03/27/java-gc-learning/ 写在前面 使 ...

  6. java gc机制 优点_聊聊Java的GC机制

    作者 某人Valar 如需转载请保留原文链接 部分图片来自百度,如有侵权请联系删除 本文目录 什么是GC JVM内存结构简单介绍 可达性分析与GC Roots 常见的垃圾收集算法 1. 什么是GC G ...

  7. JAVA GC 机制详解

    最近整理GC相关原理,发现各种文章都太乱,于是整理一份自己看得懂,不废话,具体如下. GC主要用于管理JVM的堆区,所以先来介绍一下JVM的内存分配.  1.程序计数器(Program Conuter ...

  8. java gc机制_javaGC机制

    什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理非常重要. 垃圾回收就是对这些无效资源的处理,是对内存资源的 ...

  9. 32位jdk最大内存_你了解Java 内存区域和GC机制吗?

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

最新文章

  1. IIS部署asp.net core webapi
  2. warning: implicit declaration of function ‘sleep’(添加头文件: #include <unistd.h>)
  3. 开发者福利:史上最全Android 开发和安全系列工具
  4. 在 TreeView 控件中显示分层数据
  5. 解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码
  6. puppet enc mysql_精通Puppet配置管理工具
  7. OGNL与Struts2标签展示页面(一)
  8. 最会说话的人,都有这十种风度
  9. 毕淑敏:接纳自卑,感悟幸福
  10. 山西计算机应用能力,《山西省计算机应用能力考试练习系统》使用说明
  11. 全面理解Unity加载和内存管理
  12. xp大容量u盘补丁_老电脑上大硬盘补丁
  13. 014游移方位惯导系统力学编排公式推导
  14. 概要设计和详细设计(软件)
  15. 经典c程序100例详解
  16. 关于“DEP数据执行保护”的解决方案
  17. GD32F130之LVD低压检测
  18. 云计算如何运用在政府行业--解决方案
  19. Pycharm远程连接服务器(windows下远程修改服务器代码)
  20. html手机分辨率选择,[HTML5]手机屏幕分辨率和浏览器分辨率

热门文章

  1. 微信公众号最佳实践 ( 10.2)回复QQ表情和Emoji表情
  2. Latex在footnote或在bib中插入链接时出现波浪号~的解决方案
  3. 程序中美元符号$是什么
  4. global.php,深入理解PHP中的global
  5. python 更换windows壁纸(简单)
  6. 关于netty的IllegalReferenceCountException refCnt: 0, decrement: 1
  7. Java101___一个牛人给JAVA初学者的建议
  8. PPM-Pyramid pooling module
  9. 对项目采购管理的分析----合同类型及例题
  10. 用Python做数据分析告诉你奶茶哪家最好喝性价比最高?