前段时间,帮一个小老弟联系了一下字节的老同学,内推了一波,在一面的时候,表现相当不错,毕竟这玩意咱内推也怕推的人过去了不能满足需求打脸不是,可是在二面的时候出了问题,问这小子也不说,没办法,只能去联系一下老同学了
这不,破费一波吧老同学约出来吃顿饭,他告诉我其实小老弟并不是个例,他倒没觉得有什么,不过他提醒了我让我告诉小老弟以后面试的几个点,在这里我也分享给大家:
- 当面试官向你提问JVM的实战问题时,你是否感觉到无所适从?
- 想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴?
- 面对JVM的海量参数,你是否感觉到迷茫无助?
- 看过很多的JVM文章,但当遇到了生产环境中真实问题的时候,你是否依然不知道如何进行分析排查?
如果是这样,我觉得我们大家先想清楚在金九银十这个时间段“自己想要什么”最为重要
当时跟朋友聊了半天,其实最重要的还是“实战”! 先来点初级的资料
帮助大家回顾一下基础知识吧,是什么玩意引起的我们需要进行jvm调优?
1.什么是垃圾
C语言申请内存:malloc free
C++: new delete
Java: new ?
自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题:
忘记回收
多次回收
没有任何引用对象的一个对象或者多个对象(循环引用)
2.如何定位垃圾
- 引用计数
- 根可达算法
3.常见的垃圾回收算法
- 标记清除 - 位置不连续 产生碎片
- 拷贝算法 - 没有碎片,浪费空间
- 标记压缩 - 没有碎片,效率偏低
4.JVM内存分代模型(用于分代垃圾回收算法)
- 部分垃圾回收器使用的模型
- 新生代 + 老年代 + 永久代(1.7)/ 元数据区(1.8) Metaspace永久代 元数据 - Class永久代必须指定大小限制 ,元数据可以设置,也可以不设置,无上限(受限于物理内存)字符串常量 1.7 - 永久代,1.8 - 对MethodArea逻辑概念 - 永久代、元数据
- 新生代 = Eden + 2个suvivor区 YGC回收之后,大多数的对象会被回收,活着的进入s0再次YGC,活着的对象eden + s0 -> s1再次YGC,eden + s1 -> s0年龄足够 -> 老年代 (15 CMS 6)s区装不下 -> 老年代
- 老年代顽固分子老年代满了FGC Full GC
- GC Tuning (Generation)尽量减少FGCMinorGC = YGCMajorGC = FGC
5.常见的垃圾回收器
- Serial 年轻代 串行回收
- PS 年轻代 并行回收
- ParNew 年轻代 配合CMS的并行回收
- SerialOld
- ParallelOld
- ConcurrentMarkSweep 老年代 并发的, 垃圾回收和应用程序同时运行,降低STW的时间(200ms)
- G1(10ms)
- ZGC (1ms) PK C++
- Shenandoah
- Eplison
1.8默认的垃圾回收:PS + ParallelOld
6.JVM调优第一步,了解生产环境下的垃圾回收器组合
- JVM参数分类标准: - 开头,所有的HotSpot都支持非标准:-X 开头,特定版本HotSpot支持特定命令不稳定:-XX 开头,下个版本可能取消-XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal 最终参数值-XX:+PrintFlagsInitial 默认参数值
怎么样,看完上面的内容之后又没有什么感觉呢?是不是打开了尘封的记忆,那继续往下看
上面总结的GC的一些基础知识,那除了GC之外,JVM还有哪些知识可以询问呢?
我把这些知识整理成相应的知识图谱,对每一个知识点进行了相应的整理以及内容的概括,但是还是需要各位学习的朋友根据自己的情况进行整理
以这张脑图为中心,这些知识点你在面试之前要注意一下
第一部分
- 什么是垃圾?
- 如何定位垃圾?
- 常用垃圾回收算法
- 常用垃圾回收器
- 系统上线前预估系统的内存占用情况
- 系统上线前预估系统的并发访问情况
- 根据预估值设定JVM初始参数
- 压力测试方法论
- 根据压测结果调整参数值
- 系统上线后设定日志参数
- 定期观察日志情况
- 根据日志解决实战问题
第二部分
- 为什么一个百万级TPS系统会频繁GC?
- 定位JVM问题的实用参数设置
- 用top命令观察系统运行情况
- 用jps定位虚拟机进程
- 用jstat定位JVM问题
- 用jmap导出内存转储文件
- 用jstack定位问题线程
- 用jhat分析转储文件
- 其他给力的工具visual VM,MAT,Arthas介绍
- 实际操作(这是重点,毕竟绝知此事要躬行,不实践,有些是根本没办法确定会出现哪些问题)
这两部分的内容,我已经整理好了相应的视频
需要这些视频资料的,关注+转发后,私信“资料”即可查看获取方法
不过,我不知道各位怎么想,反正我身边有人是这样,喜欢看书不喜欢看文档,没关系,只要能帮到你,我乐意,jvm书籍奉上,这也是我再整理思维导图的时候参考最多的书籍,内容包括:jvm架构、参数、垃圾回收、内存分配、性能监控工具、Java堆、Class文件结构、Class装载系统、字节码执行、实战
详细内容展示
篇幅原因,就展示这一些吧,这些资料已经准备好了,
关注公众号:Java架构师联盟,每日更新技术好文,后台回复书籍获取精美资料后,添加小助手:msbxq2020免费获取
部分资料已经上传到我的git仓库中:有需要的可以下载