字体多的网站,如何弄一个网站,wordpress 本机安装目录,门户网站建设推广文章目录前言一、部分大厂对于 JVM GC 的面试题1.1、百度1.2、顺丰1.3、京东1.4、淘宝1.5、阿里、蘑菇街二、Garbage Collectors#xff08;GC#xff09;作何使用三、GC 的十种类型四、JVM 的版本参数信息4.1、查看 Java 启动时所有默认的命令行参数4.2、查看 Java 启动时 G…
文章目录前言一、部分大厂对于 JVM GC 的面试题1.1、百度1.2、顺丰1.3、京东1.4、淘宝1.5、阿里、蘑菇街二、Garbage CollectorsGC作何使用三、GC 的十种类型四、JVM 的版本参数信息4.1、查看 Java 启动时所有默认的命令行参数4.2、查看 Java 启动时 GC 的参数信息五、GC 的分代模型与分区模型5.1、分代模型5.1.1、新生代5.1.2、老年代总结前言 现在除了一些有工作和开发经验的大神基本很少有人在简历上敢写“精通 JVM 调优有过 JVM 调优经验”因为应聘者如果写这句话就意味着你的面试将会是很“难过”的面试官会变着法的问你如何进行 JVM 系列调优如果你的基础比较薄弱或者是仅仅背面试题速成那么你很可能在面试中露馅。JVM 作为 Java 的核心面试后端开发工程师或者架构师这都是必备的技能。既然 JVM 如此重要那我就在本系列中完整的过一遍让你敢于在简历上写“精通 JVM 调优有过 JVM 调优经验”薪资涨 5k 在聊 JVM 调优和 GC 之前我们先看看当下就业环境中面试对于 JVM 和 GC 的一些相关面试题看看企业开发岗需要什么样的人才。
一、部分大厂对于 JVM GC 的面试题
说明以下数据来源于 2019~2020 年一些大厂的面试题。
1.1、百度
CMS 和 G1 的异同。G1 什么时候引发 FullGC说一个最熟悉的垃圾回收算法。吞吐量优先和响应时间优先的回收器有哪些
1.2、顺丰
怎么判断内存泄漏讲一下 CMS 的流程。
1.3、京东
为什么压缩指针超过 32G 失效
1.4、淘宝
什么是内存泄漏GC 调优有经验吗一般出现 GC 问题你怎么解决
1.5、阿里、蘑菇街
ThreadLocal 有没有内存泄漏问题G1 两个 Region 不是连续的而且之间还有可达的引用我现在要回收一个另一个怎么处理讲一下 JVM 堆内存管理对象分配过程。听说过 CMS 的并发预处理和并发可中断预处理吗到底多大的对象会被直接扔到老年代
看了面试题作何感想可能有人觉得简单有人一知半解听过但是不会。不要急我们慢慢来。
二、Garbage CollectorsGC作何使用
首先我们都知道在 Java 当中我们在创建一个对象之后就可以无需再去管它该对象不被使用变成一个垃圾之后谁去进行处理Garbage Collectors垃圾回收器。
备注后续文章内容 Garbage Collectors 皆用 GC 代替。
三、GC 的十种类型
JVM 作为 Java 的枢纽管理着全部的内存而对于内存的分配和回收就是由垃圾回收器来控制。
从 JVM 的诞生到现在 2021 年一共产生过十种类型的垃圾回收器如下图所示 这里呢大家可以对这十种垃圾回收器仅作了解我们将会在后续的章节中一一为大家介绍。
四、JVM 的版本参数信息
现在企业开发绝大多数使用的版本为 1.8。我本地的开发版本也是 1.8我们就通过该版本来进行演示。 如果我们直接将程序部署到 JVM 上没有做过任何调优动作1.8 版本的默认 GC 为 Parallel。
可能有人会有疑问如何查看开发环境下 JVM 默认的 GC 版本信息呢别急往下看。
首先我们来认识以下几个命令我们打开 CMD 命令界面。
4.1、查看 Java 启动时所有默认的命令行参数
输入以下 Shell 命令
java -XX:PrintCommandLineFlags这是我们就可以看到打印出的 Java 启动时所有默认的命令行参数如下图所示 4.2、查看 Java 启动时 GC 的参数信息
如果只需要查看本地环境下的 GC 参数信息我们输入如下 Shell 命令即可
java -XX:PrintCommandLineFlags -version我们可以从控制台的返回信息得知1.8.0_251-b08 版本所对应的默认 GC 为 Parallel如下图所示 五、GC 的分代模型与分区模型
上面我们已经说到内存的分配和回收就是由垃圾回收器来控制。
我们将 GC 的使用分为两大类分别是分代模型和分区模型。
分代模型两个垃圾回收器混合控制系统中的垃圾回收。分区模型不再分代一个垃圾回收器就足够。
在本节中我们将着重对分代模型进行介绍。
5.1、分代模型
分代模型将内存分为两个大的部分新生代和老年代。
如下图所示左半部分为新生代右半部分为老年代 新生代和老年代所对应的回收算法应用
新生代大量死去少量存活采用复制算法。老年代存活率高回收较少采用MC或MS。
5.1.1、新生代
刚刚诞生的的对象为“新生”存放在新生代区域里面。随着程序的运行大部分“新生对象”被垃圾回收。
5.1.2、老年代
垃圾回收器回收了多次没有回收掉的对象被称为“老年”就被存放在老年代中。
在默认情况下 JDK 1.8 没有调参数、调优用的就是 GC 的分代模型。 总结 在本文中我们通过面试题知道了大厂开发对于 JVM 的要求暂时了解在 JVM 中存在的十种 GC学会如何查看本地开发环境默认的 GC掌握了 GC 的两种使用方式分代模型与分区模型明白什么样的对象属于什么代存放在内存中的什么位置。同时在新生代和老年代中又会诞生各种各样的垃圾回收算法我们将在下一小节讲解。 我是白鹿一个不懈奋斗的程序猿。望本文能对你有所裨益欢迎大家的一键三连若有其他问题、建议或者补充可以留言在文章下方感谢大家的支持