文章目录

  • 前言
  • 一、部分大厂对于 JVM GC 的面试题
    • 1.1、百度
    • 1.2、顺丰
    • 1.3、京东
    • 1.4、淘宝
    • 1.5、阿里、蘑菇街
  • 二、Garbage Collectors(GC)作何使用
  • 三、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 Collectors(GC)作何使用

首先我们都知道,在 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 的两种使用方式,分代模型与分区模型,明白什么样的对象属于什么代,存放在内存中的什么位置。同时,在新生代和老年代中又会诞生各种各样的垃圾回收算法,我们将在下一小节讲解。


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

JVM 调优 1:“精通 JVM 调优,有过 JVM 调优经验”简历敢写吗?薪资涨 5k 的技巧相关推荐

  1. JVM 调优系列 1:“精通 JVM 调优,有过 JVM 调优经验”,简历敢写吗?薪资涨 5k 的技巧!

    文章目录 前言 一.部分大厂对于 JVM GC 的面试题 1.1.百度 1.2.顺丰 1.3.京东 1.4.淘宝 1.5.阿里.蘑菇街 二.Garbage Collectors(GC)作何使用 三.G ...

  2. JVM从入门到精通(尚硅谷宋红康)

    不动笔墨不读书,先把书读厚,再把书读薄是我学习方式. 所以等理解了再整理一次笔记,目前笔记和视频一一对应. 笔记连载中 <尚硅谷2020最新版宋红康JVM> 第1章:JVM与Java体系结 ...

  3. JVM从入门到精通(七):GC常用参数,Method Area,JVM调优案例分析

    GC常用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间 -XX:+UseTLAB 使用TLAB,默认打开 -XX:+PrintTLAB 打印TLAB的使用情况 -XX:T ...

  4. Spark 中 JVM 内存使用及配置详情、spark报错与调优、Spark内存溢出OOM异常

    一般在我们开发spark程序的时候,从代码开发到上线以及后期的维护中,在整个过程中都需要涉及到调优的问题,即一开始需要考虑如何把代码写的更简洁高效调优(即代码优化),待开发测试完成后,提交任务时综合考 ...

  5. JVM 从入门到“精通”,妥妥的

    作为一名优秀的 Java 开发程序员,以及想那些想要学习 Java 更深层一点的知识的同学,对 JVM 的熟悉与熟练使用是必不可缺的核心技能了,也是每个 Java 程序员应该要做到的. 深入学习 JV ...

  6. 尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)

    目录 类的加载第一步----loading 加载".class"文件的方式: 类的加载第二步----linking![在这里插入图片描述](https://img-blog.csd ...

  7. JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点

    47.JVM的内存结构,Eden和Survivor比例 49.JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数 50.-XX:+CMSScavengeBefo ...

  8. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  9. Jvm面试题总结及答案 300道(针对Jvm的面试题 )

    Jvm面试题及答案(Jvm面试题大全带答案)发现网上很多Jvm面试题及答案整理都没有答案,所以花了很长时间搜集,本套Jvm面试题大全,有大量经典的Jvm面试题以及答案,包含Jvm语言常见面试题.面试经 ...

最新文章

  1. 【AI】图示:精确度(查准率)Precision、召回率(查全率)Recall
  2. hadoop官方文档_hadoop体系简介
  3. 技术分享丨关于 Hadoop 的那些事儿
  4. 45度炸队Alpha冲刺博客集
  5. mysql高精度类型_mysql中常见的数据类型
  6. no exceptions support的测试程序
  7. 外设位宽为8、16、32时,CPU与外设之间地址线的连接方法
  8. php 自定义格式化,PHP自定义函数格式化json数据示例
  9. ThinkPHP内核仿美洽多商户多端接入无限客服系统-支持PC+WAP+公众号接入
  10. Google Analytics异步代码-创建虚拟浏览量跟踪
  11. Redmi 9将升级双频WiFi:定义2020入门机新标准
  12. 95-860-045-源码-定时器-InternalTimerService
  13. android9 mate10,华为仅这四部手机升到安卓9.0,Mate10和P20用户窃喜!
  14. VBA中对内存地址的操作
  15. 去掉QQ2008的腾讯迷你首页和聊天时的广告
  16. Shell 工具(cut)
  17. wuauclt1.exe mshta.exe 病毒清理
  18. python3 数独解法 深度遍历
  19. 大数据给交通行业带来的五大变革
  20. 精读《图解密码技术》--第一章 环游密码世界

热门文章

  1. 用计算机算小学题目,小学计算机入编考试考试试题.doc
  2. 一般二叉树的顺序存储Java_100-顺序存储二叉树思路图解
  3. 如何删除第一张单页_单页网站-网站建设中独有的风景线
  4. ios 蓝牙命令发送_实战恢复cisco 2950交换机的IOS
  5. ./mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No suc
  6. 流程变量的分组_01
  7. 使用Git推送代码到GitHub远程仓库
  8. mysql操作库命令_MYSQL数据库------操作命令笔记
  9. 单一窗口关区备案_深圳跨境电商企业进出口备案,赶紧码下学习
  10. 印象笔记编辑pdf_做笔记就用印象笔记,支持录音做笔记( 附插件下载)