GC简介

最近观察到有一个service做full GC 比较频繁,决定对它进行调优,先整理一下GC的知识。

GC分类

GC分为两类:minor GC 和 full GC

minor GC:对新生代进行的GC操作。通常采用复制算法,将Eden Space 以及survivor Space 0的不可回收对象复制到survivor Space 1。

触发条件:当Eden Space空间不足时。

full GC:对老年代进行的GC操作。通常采用标记-清除算法,即将不可回收对象做上标记,回收其它未被标记对象,这样做有一个缺点,会产生大量内存碎片。

对象衰老:每当对象经过一次minor GC, 该对象的年龄加1,当超过某个年龄的时候,该对象就会被移到老年代空间。当老年代空间不足时,就会发生full GC。

触发条件

  1. 每次经过minor GC后被移到老年代的对象平均大小大于当前老年代的剩余空间时会触发一次full GC。
  2. 如果有连续大对象需要分配内存,当经过一次minor GC后,Eden Space仍然不能容纳这些大对象,这些对象就会直接进入老年区,当老年区也无法容纳这些大对象时,就会触发full GC。
  3. 当经过一次minor GC后,survivor space无法容纳当前仍存活的对象,这些对象就会直接进入老年区, 当老年区也无法容纳这些大对象时,就会触发full GC。
  4. 在代码里调用system.gc()。
时间: 2024-10-11 16:13:26

GC简介的相关文章

GC 简介

内存分配的历史 编程语言的发展史就像一份记录,记载着编程语言不断走向抽象化和自动化的过程. 静态分配 静态分配是最简单的分配策略.程序中所有的变量名都在编译时绑定在某个存储位置上,这些绑定不会在运行时改变.静态分配有 3 个局限: 每个数据结构的大小必须在编译时可知. 过程是不能递归的,因为对于过程中的每个活动,局部变量在内存中共享相同的位置. 无法动态的创建数据结构. 不过,静态分配的确有 2 个重要的优点: 采用这一策略的编程语言的运行效率高,因为不需要在程序执行时创建或销毁栈帧(stack

Java垃圾收集器(GC)简介与最佳组合探究

Java经过近20年的演变,已经发展出一套复杂.健壮和高性能的垃圾收集器.在不同的应用场合下使用不同的GC组合能让程序性能得到可观提高.我想这也是Java这么多年来一直处于不败之地的原因之一. 以下讨论只限于Server模式下的HotSpot JVM. GC的类型 Sun/Oracle的HotSpot JVM为我们提供了多种不同的GC,一种GC只专门负责新生代或老年代的内存回收工作,所以实际使用的时候需要我们为新生代和老年代指定不同的GC.但G1例外,因为G1可以通吃整个堆内存. Serial

JVM的GC简介和实例

本文是一次内部分享中总结了jvm gc的分类和一些实例, 内容是introduction级别的,供初学人士参考.成文仓促,难免有些错误,如果有大牛发现,请留言,我一定及时更正,谢谢!JVM内存布局主要包含下面几个部分: Java Virtual Machine Stack: 也就是我们常见的局部变量栈,线程私有,保存线程执行的局部变量表.操作栈.动态连接等. Java Heap:我们最常打交道的内存区域,几乎所有对象的实例都在这个区域分配.所谓的GC基本上也就是跟这个区域打交道. Method

jvm-垃圾回收gc简介+jvm内存模型简介

gc是jvm自动执行的,自动清除jvm内存垃圾,无须人为干涉,虽然方便了程序员的开发,但同时增加了开发人员对内存的不可控性. 1.jvm是在计算机系统上又虚拟出来的一个伪计算机系统,它存在于计算机内存中并运行在操作系统之上, jvm在执行字节码时,把字节码解释成具体平台上的机器指令执行,那我们就来看看这个JVM伪计算机系统是怎么设计的,如下是jvm的体系图,运行数据区是jvm的内存模型: 程序计数器:一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是

SSD内部GC简介

SSD内部GC相关特性 P4500是一款广泛使用的NVME SSD是DC P4500,下面的GC介绍和分析就基于P4500进行.其他款可以参考相关手册. P4500读.写.擦除.回收的粒度 P4500内部写是按照物理page 对齐,而擦除是按照物理block对齐,最终GC操作的trim是通过NVME 协议中定义的 deallocate命令(deallocate命令,顾名思义,就是用来告诉SSD控制器哪些page/block里的数据不需要了,可以被SSD 控制器后续擦除.)为此需要对这些参数有一定

【原创】GC/垃圾回收简介

GC简介 1 GC机制 1.1 对象 从计算机的角度,装有数据的内存空间 1.2 作用 将内存垃圾的释放自动化 1.3 本质 将已经引用不到的对象视为死亡,将死亡的对象找出来并且作为垃圾进行回收 2 GC算法 2.1 跟踪回收 2.1.1 原理 从根开始扫描判断对象的生死 2.1.2 标记清除 (1)过程 第一次扫描:以变量或运行栈作为根,从根开始将可能被引用的对象进行标记,将没被标记的对象进行垃圾回收 第二次扫描:将全部对象进行扫描,对没有被标记的对象进行垃圾回收,扫描的同时还需要将存活的对象

JVM——垃圾回收(GC)

GC简介 java语言运行在java虚拟机(jvm)上,为了解决有限的空间和性能的保证这个矛盾体,jvm所具备的GC能力,可以有效的清除不用的对象,使空间的利用更加合理.下面介绍该机制的原理. 判断对象已废弃 引用计数法 给每一个对象都配备一个计数器,对于该对象,若增加一个指向它的引用,则计数器加1:每失效一个引用,则计数器减一. 但是,如果两个对象互相引用,但都对于外部都已失去用途,则这样的两个对象是无法被计数为0的,因为他们的计数器永远都只为1. 可达性分析法 为了解决引用计数法的缺陷,我们

Java GC 小结

很早就想对Java的GC做点小总结,一直没有时间,最近看了下java paper上的java gc文章,觉得不错,读了读,顺便做下总结. java paper的GC文章地址,里面有很多java技术文章,写的都不错. 1.Java GC 简介 JVM的垃圾回收机制使开发者不必过多考虑内存的申请与释放,这样降低了软件开发的成本和语言的学习成本. 不同的JVM对GC的实现是不同的,目前Oracle维护着两种JVM,JRockit JVM,HotSpot JVM. 本文讨论的JVM是居于HotSpot的

JVM参数调优:Eclipse启动实践

本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java Virtual Machine)的架构,垃圾收集的介绍等.这里摘录出关于配置 JVM 基本参数来调优 Eclipse 启动的过程,比较初级,供初学者参考. 基础知识 针对 JVM 的参数调优主要集中在数据区大小的控制和垃圾回收策略的选择.关于 JVM 运行机制等更多内容可参考其他博文 JVM 的运行时数据区