029、大厂面试题:最新的G1垃圾回收器的工作原理,你能聊聊吗?

本文是个人学习《从 0 开始带你成为JVM实战高手》内容总结,详细内容扫描二维码

1、ParNew + CMS的组合让我们有哪些痛点?

  STW,G1垃圾回收器比~更好的垃圾回收性能

2、G1垃圾回收器

  G1 同时回收新生代和老年代的对象,把java堆拆分为多个大小相等的Region最大特点:可以设置垃圾回收‘预期停顿时间’,G1全权负责达到这个目标,控制来及回收对性能的影响

3、G1是如何做到对垃圾回收导致的系统停顿可控的?

1-通过把内存拆分为大量小Region。 2-追踪每个Region的回收价值 - 有多少垃圾、回收这些垃圾预估耗时多少。 3-在设置的垃圾回收时间内,选择回收价值最好的进行回收

??表述中‘设置预期停顿时间’,G1全权负责,保证达到这个目标,后面表述‘尽量控制在指定的时间范围’,请问会存在回收时间超时的现象么?

答:几乎不会

??、如果在指定的时间内,回收的空间满足不了新对象的空间需求会怎样?是继续触发回收还是oom

答:继续触发回收

4、Region可能属于新生代也可能属于老年代

  新生代和老年代各自的内存区域是不停的变动的,由G1自动控制。

??状态转换:新生代和老年代各自的内存区域是不停的变动,新生代变为老年代可以理解,老年代会变为新生代么?我猜想应该不会,可能老年代的Region空间全部回收完了,可能从老年代 变成 初始状态(非新非老),然后变成新生代,这样循环轮回。

答:会的,G1里一切都可以变,Region都是动态灵活的,一个Region被回收掉垃圾清空后(复制到其他Region),后面就可以继续灵活分配了。

我的回答:Region变空后才会改变分代属性

原文地址:https://www.cnblogs.com/csldm/p/11306489.html

时间: 2024-10-29 15:52:09

029、大厂面试题:最新的G1垃圾回收器的工作原理,你能聊聊吗?的相关文章

java垃圾回收器的工作原理

Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况.自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担. 拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别.在 C++语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间.当内存释放不够完全时,即存在分配但永不释放的内存块,就会引起内存泄漏,严重时甚至导致程序瘫痪. 以下列举了垃圾回收器常用的算法及实验原理: 引用

JVM:G1垃圾回收器

http://blog.jobbole.com/109170/ https://blog.csdn.net/baiye_xing/article/details/73743395 G1垃圾收集器关键技术. ===G1垃圾回收器是如何划分堆空间的呢? G1垃圾回收器将内存分成一个个小块区域,这些小块区域的大小可以是1M,2M,4M,8M等等,并且这些小块区域可以是eden,survivor,old,以及humongous区域.其中humongous用来存大对象,如果一个对象超过某块空间的1/2的时

031、动手实验:线上系统部署如果采用G1垃圾回收器,应该如何设置参数?

本文是个人内容总结,详细内容扫描二维码 1.前文回顾 1.G1中有新 .老.大三种Region 2.新生代回收条件:新生代Eden区满的时候 3.新生代GC仍然采用复制算法 4.控制停顿时间,对Region进行挑选回收 5.进入老年的条件: (1)熬过了一定次数的GC (2)动态年龄判定规则 (3)存活对象在Survivor放不下 2.什么时候触发新生代+老年代的混合垃圾回收? -XX:InitiatingHeapOccupancyPercent,默认值是45%,表示如果老年代占据了堆内存的45

G1垃圾回收器

垃圾回收器的发展历程 背景 01.G1解决的问题 G1垃圾回收器是04年正式提出,12开始正式支持,在17年作为JDK9默认的垃圾处理器. 在04年的时候,java程序堆的内存越来越大,从而导致程序中可存活的活对象越来越多,因此GC的STW时间越来越长.这是G1要解决的主要问题:STW带来的停顿时间太长了. CMS在此之前效率也很高,但活对象数量一多,STW时间也很长.而且CMS无法解决内存碎片化的问题. G1还解决的问题是:CMS在GC后,无法compact内存. 02.G1达成的目标 (1)

JVM中的G1垃圾回收器

我们先回顾一下主流Java的垃圾回收器(HotSpot JVM).本文是针对堆的垃圾回收展开讨论的. 堆被分解为较小的三个部分.具体分为:新生代.老年代.持久代. 绝大部分新生成的对象都放在Eden区,当Eden区将满,JVM会因申请不到内存,而触发Young GC ,进行Eden区+有对象的Survivor区(设为S0区)垃圾回收,把存活的对象用复制算法拷贝到一个空的Survivor(S1)中,此时Eden区被清空,另外一个Survivor S0也为空.下次触发Young GC回收Eden+S

Java GC(垃圾回收)的工作原理

Garbage Collection简称GC,是垃圾回收的意思. 内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃.Java语言提供的GC功能可以自动检测对象是否超过作用域,从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法,资源回收工作全部交由GC来完成,程序员不能精确控制垃圾回收的时机. 下面简要介绍一下GC在实现垃圾回收时的基本工作原理. Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放.对于程序员来说,

.net GC垃圾回收机制工作原理(转)

首先了解一下托管资源--.net所指的托管只是针对内存这一块,并不是对于所有的资源:针对Stream,数据库的连接,com对象,GDI+的相关对象等,这些对象并不受.net的管理成为非托管资源;对于内存的回收和管理,由GC完成,而其它资源则需要手动释放. 其次垃圾的定义--.Net类型分为两大类,一个就是值类型,另一个就是引用类型.前者是分配在栈上,并不需要GC回收:后者是分配在堆上,因此它的内存释放和回收需要通过GC来完成.GC的全称为“Garbage Collector”,顾名思义就是垃圾回

面试题思考:Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Servlet时执行的,负责初始化Servlet对象.可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet.无论有多少客户机访问Servlet,都不会重复执行init(). service():它是Servlet的核心,负责响应客户的请求.每当一个客户请求一个HttpServlet对象,

前端工程师 - 面试题 (最新,最全)

一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数.在本质上,闭包就 是将函数内部和函数外部连接起来的一座桥梁. (2)闭包可以用在许多地方.它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中 闭包的特性: ①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口: ②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在系