JVM与GC(一)

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

内容简介:简单地说,新对象出生在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的对象为起点,沿它的引用搜索,引用链中搜索不到的对象也不会被使用。


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

查看所有标签

猜你喜欢:

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

架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2版)

架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2版)

Martin L. Abbott、Michael T. Fisher / 陈斌 / 机械工业出版社 / 2016-4-15 / 99.00

任何一个持续成长的公司最终都需要解决系统、组织和流程的扩展性问题。本书汇聚了作者从eBay、VISA、Salesforce.com到Apple超过30年的丰富经验, 全面阐释了经过验证的信息技术扩展方法,对所需要掌握的产品和服务的平滑扩展做了详尽的论述,并在第1版的基础上更新了扩展的策略、技术和案例。 针对技术和非技术的决策者,马丁•阿伯特和迈克尔•费舍尔详尽地介绍了影响扩展性的各个方面,包......一起来看看 《架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2版)》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

HSV CMYK互换工具