前言

相信很多人一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮去学。所以很多人对于为什么要学虚拟机这个问题,一致的答案皆是:因为面试。(我也是)‘手动狗头’。

大家先来看看JVM9连问大家能答出几问:

反正小编当时被怼的一脸懵逼

其实学习JVM并不仅仅在于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题打下基础。下面我们来看看官方的定义。

随着Java以及Java社区的不断壮大,Java也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。

作为一个平台

Java虚拟机扮演着举足轻重的作用。除了Java语言,任何一种能够被编译成字节码的计算机语言都属于Java这个平台。

作为一种文化

Java 几乎成为了“开源”的代名词。

作为一个社区

Java 拥有无数的开发人员,有数不清的论坛和资料。它已经俨然成为了一个良好而庞大的生态系统。而这个生态系统的核心还是Java 虚拟机。

这篇文章就给大家分享出三份JVM文档,(能吃透这三份文档也能算半个大佬了(手动狗头))

  • 1.JVM故障诊断与性能优化
  • 2.JVM G1源码分析和调优
  • 3.JVM与性能优化知识点整理

JVM故障诊断与性能优化

第1章 初探Java 虚拟机

  • 知根知底:追溯Java的发展历程
  • 跨平台的真相: Java虚拟机来做中介
  • 一切看我的:Java语言规范
  • 一切听我的: Java虚拟机规范
  • 数字编码就是计算机世界的水
  • 抛砖引玉:编译和调试虚拟机

第2章 认识Java虚拟机的基本结构

  • 谋全局者才能成大器: 看穿Java虚拟机的架构
  • 小参数能解决大问题:学会设置Java虚拟机的参数
  • 对象去哪儿: 辨清Java堆
  • 函数如何调用: 出入Java栈
  • 类去哪儿了: 识别方法区

    第3章 常用Java 虚拟机参数

    • 一切运行都有迹可循:掌握跟踪调试参数
    • 让性能飞起来:学习堆的配置参数
    • 别让性能有缺口:了解非堆内存的参数配置
    • Client 和Server二选一:虚拟机的工作模式

    第4章垃圾回收概念与算法

    • 内存管理清洁工:认识垃圾
    • 清洁工具大PK:讨论常用的垃圾回收算法
    • 谁才是真正的垃圾: 判断可触及性
    • 垃圾回收时的停顿现象: Stop-The-World 案例实战

      第5章 垃圾收集 器和内存分配

      • 一心一意一件事:串行回收器
      • 人多力量大: 并行回收器
      • 一心多用都不落下: CMS回收器
      • 未来我做主: G1回收器
      • 回眸:有关对象内存分配和回收的一些细节问题
      • 温故又知新: 常用的GC参数
      • 动手才是真英雄:垃圾回收器对Tomcat性能影响的实验

      第6章 性能监控工具

      • 有我更高效: Linux下的性能监控工具
      • 用我更高效: Windows 下的性能监控工具
      • 外科手术刀: JDK性能监控工具
      • 我是你的眼: 图形化虚拟机监控工具JConsole
      • 一目了然:可视化性能监控工具Visual VM
      • 来自JRockit的礼物:虚拟机诊断工具Mission Corto

      第7章 分析Java堆

      • 对症才能下药:找到内存溢出的原因
      • 无处不在的字符串: String 在虚拟机中的实现
      • 虚拟机也有内窥镜: 使用MAT分析Java堆
      • 筛选堆对象: MAT对OQL的支持
      • 更精彩的查找: Visual VM对OQL的支持

      第8章 锁与并发

      • 安全就是锁存在的理由:锁的基本概念和实现
      • 避免残酷的竞争: 锁在Java虚拟机中的实现和优化
      • 应对残酷的竞争: 锁在应用层的优化思路
      • 无招胜有招: 无锁
      • 将随机变为可控: 理解Java内存模型

      第9章 Class 文件结构

      • 不仅跨平台,还能跨语言:语言无关性
      • 虚拟机的基石: Class 文件
      • 操作字节码: 走进ASM

        第10章 Class 装载系统

        • 来去都有序: 看懂Class文件的装载流程
        • 一切Class从这里开始:掌握ClassLoader

        第11章 字节码执行

        • 代码如何执行: 字节码执行案例
        • 执行的基础: Java虚拟机常用指令
        • 更上一层楼:再看ASM
        • 谁说Java太刻板: Java Agent运行时修改类
        • 与时俱进:动态函数调用
        • 跑得再快点:静态编译优化
        • 提高虚拟机的执行效率: JIT及其相关参数
      • 为了更好地了解和使用Java,越来越多的开发人员开始关注Java虚拟机(JVM)的实现技术,其中垃圾回收(也称垃圾收集)是最热门的技术点之一。目前G1作为JVM中最新、最成熟的垃圾回收器受到很多的人关注。

        篇幅限制只能以这样的形式展示出来啦,这三份文档已经打包好上传百度网盘了

        JVM G1源码分析和调优

        第1章 垃圾回收概述

        • Java发展概述
        • 常见术语
        • 回收算法概述
        • JVM垃圾回收器概述
      • 第2章 G1的基本概念

        • 分区
        • G1停顿预测模型
        • 卡表和位图
        • 对象头
        • 内存分配和管理
        • 线程
        • 日志解读
        • 参数介绍和调优

        第3章 G1的对象分配

        • 对象分配概述
        • 快速分配
        • 慢速分配
        • G1垃圾回收的时机
        • 参数介绍和调优

          第4章 G1的Refine线程

          • 记忆集
          • Refine 线程的功能及原理
          • Refinement Zone
          • RSet 涉及的写屏障
          • 日志解读
          • 参数介绍和调优

          第5章 新生代回收

          • YGC算法概述
          • YGC代码分析
          • YGC算法演示
          • 日志解读
          • 参数介绍和调优

          第6章 混合回收

          • 并发标记算法详解
          • 并发标记算法的难点
          • G1中混合回收的步骤
          • 混合回收中并发标记处理的线程
          • 并发标记算法演示
          • GC活动图
          • 日志解读
          • 参数优化

          第7章 Full GC

          • Evac失败
          • 串行FGC
          • 并行FGC
          • 日志解读
          • 参数介绍和调优

          第8章 G1中的引用处理

          • 引用概述
          • 可回收对象发现
          • 在GC时的处理发现列表
          • 重新激活 可达的引用
          • 日志解读
          • 参数介绍和调优

          第9章 G1的新特性:字符串去重

          • 字符串去重概述
          • 日志解读
          • 参数介绍和调优
          • 字符串 去重和String.intern的区别
          • String.intern 中的实现

            第10章 线程中的安全点

            • 安全点的基本概念
            • G1并发线程进人安全点
            • 解释线程进人安全点
            • 编译线程进人安全点
            • 正在执行本地代码的线程进入安全点
            • 安全点小结
            • 日志分析
            • 参数介绍和调优

            第11章 垃圾回收器的选择

            • 如何衡量垃圾回收器
            • G1调优的方向

            第12章 新一代垃圾回收器

            • Shenandoah
            • ZGC

              篇幅限制只能以这样的形式展示出来啦,这三份文档已经打包好了

              JVM与性能优化知识点整理

              一、JVM内存区域划分

              • 程序计数器(线程私有)
              • Java栈(线程私有)
              • 本地方法栈(线程私有)
              • 堆(线程共享)
              • 方法区(线程共享)
              • 直接内存(线程共享)

              二、JVM执行子系统

              • Cass类文件结构
              • 字节码指令
              • 类加载机制
              • 类加载器
              • Tomcat类加载机制
              • 方法调用详解

              三.垃圾回收器和内存分配策略

              • Java中是值传递还是引用传递?
              • 引用类型
              • 基本垃圾回收算法
              • 分代处理垃圾
              • JAVA中垃圾回收GC的类型

              四、编写高效优雅Java程序

              • 面向对象
              • 方法
              • 通用程序设计

              五、性能优化

              • 常用的性能评价/测试指标
              • 常用的性能优化手段
              • 应用服务性能优化

                这三份文档可以说包含了JVM的方方面面,篇幅限制只能以这样的形式展示出来啦,这三份文档已经打包好了