JVM与GC(一)

栏目: Java · 发布时间: 6年前

内容简介:简单地说,新对象出生在Eden,如果Eden不够了,触发gc(Minor GC)把存活的对象搬到s0,下次gc又搬到s1,再下次又搬到s0,如此往复,一个对象被搬到一定次数就是几岁,达到这个阈值就进入老年代。(默认15岁,就是一个狗狗的寿命)老年代满了也会gc(Major GC/Full GC)

JVM运行时数据区域

JVM与GC(一)

名词解释

  • 程序计数器(Program Counter Register):线程私有,存储每个线程的JVM指令,不存储native方法内容。方法报错的时候异常栈能告诉在代码的哪一行,就是程序计数器的功能。
  • 虚拟机栈(VM Stack):每个线程私有,存储方法调用栈和线程局部基本类型变量。栈帧保存对堆内对象的引用。
  • 堆(Heap):线程共享,存储对象实例,GC就是回收这一部分。由于堆区域线程共享,对象在堆中分配需要加锁,这个操作增大开销,所以会先做逃逸分析,将线程本地小对象尝试在TLAB(Thread Local Allocation Buffer)中分配,如果不能才去堆中的Eden分配。TLAB默认是Eden的1%,大对象在TLAB放不下,就在Eden分配了,所以多个小对象可能比一个大对象分配要快。
  • 运行时常量池(Runtime Constant Pool):在方法区中分配,类的常量信息,方法引用信息,字符串常量等。

堆内结构

JVM与GC(一)

简单地说,新对象出生在Eden,如果Eden不够了,触发gc(Minor GC)把存活的对象搬到s0,下次gc又搬到s1,再下次又搬到s0,如此往复,一个对象被搬到一定次数就是几岁,达到这个阈值就进入老年代。(默认15岁,就是一个狗狗的寿命)老年代满了也会gc(Major GC/Full GC)

GC算法

  • Mark-Sweep 标记清除算法

顾名思义,两个阶段,先标记不被引用的对象,再清除掉,腾出内存。就像把围棋里被吃掉的棋子提出来。

缺点:空间碎片多

  • Copying 复制算法

把空间等分两块,一块满了将所有活着的对象复制到另一个块空间,再一次清理掉之前的空间。

优点:解决了碎片问题

缺点:可用内存变低了

  • Mark-Compact 标记整理算法

标记之后,把存活的对象都移动到内存一端,把端边界以外的内存空间清理掉。

没有碎片,也能充分利用内存空间。老年代通常使用这种算法。

回收目标

引用计数为空的对象:每个对象有引用计数器,有引用就+1,引用失效就-1,为0则不可能再被使用。

GC root引用链搜索不到的对象:以GC root的对象为起点,沿它的引用搜索,引用链中搜索不到的对象也不会被使用。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网站运维技术与实践

网站运维技术与实践

饶琛琳 / 电子工业出版社 / 2014-3 / 69.00元

网站运维工作,一向以内容繁杂、覆盖面广著称。《网站运维技术与实践》选取日常工作涉及的监测调优、日志分析、集群规划、自动化部署、存储和数据库等方面,力图深入阐述各项工作的技术要点及协议原理,并介绍相关开源产品的实践经验。在技术之外,作者也分享了一些关于高效工作及个人成长方面的心得。 《网站运维技术与实践》适合Linux 系统管理员、中大型网站运维工程师及技术负责人、DevOps 爱好者阅读。同......一起来看看 《网站运维技术与实践》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具