前段时间,帮一个小老弟分割了一下字节的老同学,内推了一波,在一面的时候,体现相当不错,毕竟这玩意咱内推也怕推的人过来了不能满足需要打脸不是,可是在二面的时候出了问题,问这小子也不说,没方法,只能去分割一下老同学了

这不,花费一波吧老同学约进去吃顿饭,他通知我其实小老弟并不是个例,他倒没感觉有什么,不过他揭示了我让我通知小老弟当前面试的几个点,在这里我也分享给大家:

  • 当面试官向你发问JVM的实战问题时,你是否感觉到莫衷一是?
  • 想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴?
  • 面对JVM的海量参数,你是否感觉到迷茫无助?
  • 看过很多的JVM文章,但当遇到了生产环境中实在问题的时候,你是否仍然不晓得如何进行剖析排查?

如果是这样,我感觉咱们大家先想分明在金九银十这个时间段“本人想要什么”最为重要

过后跟敌人聊了半天,其实最重要的还是“实战”! 先来点高级的材料

帮忙大家回顾一下基础知识吧,是什么玩意引起的咱们须要进行jvm调优?

1.什么是垃圾

C语言申请内存:malloc free

C++: new delete

Java: new ?

主动内存回收,编程上简略,零碎不容易出错,手动开释内存,容易出两种类型的问题:

遗记回收

屡次回收

没有任何援用对象的一个对象或者多个对象(循环援用)

2.如何定位垃圾

  1. 援用计数
  2. 根可达算法

3.常见的垃圾回收算法

  1. 标记革除 - 地位不间断 产生碎片
  2. 拷贝算法 - 没有碎片,节约空间
  3. 标记压缩 - 没有碎片,效率偏低

4.JVM内存分代模型(用于分代垃圾回收算法)

  1. 局部垃圾回收器应用的模型
  2. 新生代 + 老年代 + 永恒代(1.7)/ 元数据区(1.8) Metaspace永恒代 元数据 - Class永恒代必须指定大小限度 ,元数据能够设置,也能够不设置,无下限(受限于物理内存)字符串常量 1.7 - 永恒代,1.8 - 对MethodArea逻辑概念 - 永恒代、元数据
  3. 新生代 = Eden + 2个suvivor区 YGC回收之后,大多数的对象会被回收,活着的进入s0再次YGC,活着的对象eden + s0 -> s1再次YGC,eden + s1 -> s0年龄足够 -> 老年代 (15 CMS 6)s区装不下 -> 老年代
  4. 老年代固执分子老年代满了FGC Full GC
  5. GC Tuning (Generation)尽量减少FGCMinorGC = YGCMajorGC = FGC

5.常见的垃圾回收器

  1. Serial 年老代 串行回收
  2. PS 年老代 并行回收
  3. ParNew 年老代 配合CMS的并行回收
  4. SerialOld
  5. ParallelOld
  6. ConcurrentMarkSweep 老年代 并发的, 垃圾回收和应用程序同时运行,升高STW的工夫(200ms)
  7. G1(10ms)
  8. ZGC (1ms) PK C++
  9. Shenandoah
  10. Eplison

1.8默认的垃圾回收:PS + ParallelOld

6.JVM调优第一步,理解生产环境下的垃圾回收器组合

  • JVM参数分类规范: - 结尾,所有的HotSpot都反对非标准:-X 结尾,特定版本HotSpot反对特定命令不稳固:-XX 结尾,下个版本可能勾销-XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal 最终参数值-XX:+PrintFlagsInitial 默认参数值

怎么样,看完下面的内容之后又没有什么感觉呢?是不是关上了尘封的记忆,那持续往下看

下面总结的GC的一些基础知识,那除了GC之外,JVM还有哪些常识能够询问呢?

我把这些常识整顿成相应的常识图谱,对每一个知识点进行了相应的整顿以及内容的概括,然而还是须要各位学习的敌人依据本人的状况进行整顿

以这张脑图为核心,这些知识点你在面试之前要留神一下

第一局部

  1. 什么是垃圾?
  2. 如何定位垃圾?
  3. 罕用垃圾回收算法
  4. 罕用垃圾回收器
  5. 零碎上线前预估零碎的内存占用状况
  6. 零碎上线前预估零碎的并发拜访状况
  7. 依据预估值设定JVM初始参数
  8. 压力测试方法论
  9. 依据压测后果调整参数值
  10. 零碎上线后设定日志参数
  11. 定期察看日志状况
  12. 依据日志解决实战问题

第二局部

  1. 为什么一个百万级TPS零碎会频繁GC?
  2. 定位JVM问题的实用参数设置
  3. 用top命令察看零碎运行状况
  4. 用jps定位虚拟机过程
  5. 用jstat定位JVM问题
  6. 用jmap导出内存转储文件
  7. 用jstack定位问题线程
  8. 用jhat剖析转储文件
  9. 其余给力的工具visual VM,MAT,Arthas介绍
  10. 实际操作(这是重点,毕竟绝知此事要躬行,不实际,有些是基本没方法确定会呈现哪些问题

这两局部的内容,我曾经整顿好了相应的视频

须要这些视频材料的,关注+转发后,私信“材料”即可查看获取办法

不过,我不晓得各位怎么想,反正我身边有人是这样,喜爱看书不喜爱看文档,没关系,只有能帮到你,我乐意,jvm书籍奉上,这也是我再整顿思维导图的时候参考最多的书籍,内容包含:jvm架构、参数、垃圾回收、内存调配、性能监控工具、Java堆、Class文件构造、Class装载零碎、字节码执行、实战

具体内容展现

篇幅起因,就展现这一些吧,这些材料曾经筹备好了,须要这些材料的,关注公众号:Java架构师联盟,回复书籍获取精美材料后,增加私人小助手获取