史上最全 JVM 性能调优:线程 + 子系统 + 类加载 + 内存分配 + 垃圾回收(内附最全学习笔记),不得不服,面试官也问不出毛病

214 篇文章 0 订阅
本文全面解析JVM的内存区域、执行子系统、垃圾回收和性能优化,涵盖线程、子系统、类加载、内存分配等关键知识点,是Java工程师面试必备的深度学习资料。
摘要由CSDN通过智能技术生成

JVM 调优

  1. 概念

  2. 基本垃圾回收算法

  3. 垃圾回收面临的问题

  4. 分代垃圾回收详述 1

  5. 分代垃圾回收详述 2

  6. 典型配置举例 1

  7. 典型配置举例 2

  8. 新一代的垃圾回收算法

  9. 调优方法

  10. 反思

什么是 JVM?

在互联网行业,JVM 毫无疑问已经是最热门的技术之一

JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

Java 语言的一个非常重要的特点就是平台无关性。而使用 Java 虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入 Java 语言虚拟机后,Java 语言在不同平台上运行时不需要重新编译。Java 语言使用 Java 虚拟机屏蔽了与具体平台相关的信息,使得 Java 语言编译程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是 Java 的能够“一次编译,到处运行”的原因。

JVM 有哪些特性?

1、移植性

无论是 GC 还是 Hotspot 都可以用在任何 Java 可用的地方。比方说,JRuby 可以运行在其他平台上,Rails 应用就可以运行在 IBM 主机上的 JRuby 上,而且这台 IBM 主机运行的是 CP/CMS.实际上,由于 Java 和 OpenJDK 项目的开源,我们正在看到越来越多的平台的衍生,因此 JVM 的移植性也将越来越棒。

2、成熟

JVM 已有多年的历史,在过去的这些年里,许多开发者为它做出了许多贡献,使得它的性能一次又一次地提升,让 JVM 变得更加稳定、快速和广泛。

3、覆盖面

JRuby 和 JVM 上的其他语言项目已经被承认,一个例子是 invokedynamic specification(akaJSR292)。JSR 越来越配合新的语言,JVM 已不再是 Java 一个人定制规则。JVM 正在构建成为类如 JRuby 等项目的优良平台。还有一个 MLVM(multiple languageVM)项目,好比是新特性的清算机构,是一个许多企业应用的开发者试图添加应用的地方,而这些应用正是他们想在 JVM 中看到的。而且 JVM 开发者互相协作、彼此影响,无疑这有利于 JVM 新特性的诞生。这些细节都可以看到 JVM 正在关注开发者的需求,扩大他的覆盖面。

直接添加小助理 VX:lxmtim 即可免费领取这份 JVM 实战文档

 总目录

JVM 内存区域划分

1.程序计数器(线程私有)

2Java 栈(线程私有)

3.本地方法栈(线程私有)

4.堆(线程共享)

5.方法区(线程共享)

6.直接内存(线程共享)

JVM 执行子系统

1.Class 类文件结构

  • 1.1 Java 跨平台的基础

  • 1.2 Class 类的本质

2.字节码指令

  • 2.1 加载和存储指令

  • 2.2 运算或算术指令

  • 2.3 类型转换指令

  • 2.4 创建类实例的指令:

  • 2.5 创建数组的指令:

  • 2.6 访问字段指令:

  • 2.7 数组存取相关指令

  • 2.8 检查类实例类型的指令:

  • 2.9 操作数据管理指令

  • 2.10 控制转移指令

  • 2.11 方法调用指令

  • 2.12 方法返回指令

  • 2.13 异常处理指令

  • 2.14 同步指令

3.类加载机制

4.类加载器

  • 4.1 系统的类加载器

  • 4.2 双亲委派模型

5.Tomcat 类加载机制

6.方法调用详解

  • 6.1 解析

  • 6.2 静态分派

  • 6.3 动态分派

  • 6.4 基于栈的字节码解释执行引擎

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

1.Java 中是值传递还是引用传递?

2.引用类型

3.基本垃圾回收算法

  • 3.1 按照基本回收策略分

  • 3.2 按分区对待的方式分

  • 3.3 按系统线程分

4.分代处理垃圾

5.JAVA 中垃圾回收 GC 的类型

编写高效优雅 Java 程序

1、面向对象

  • 1.1 构造器参数太多怎么办?

  • 1.2 不需要实例化的类应该构造器私有

  • 1.3 不要创建不必要的对象

  • 1.4 避免使用终结方法

  • 1.5 使类和成员的可访问性最小化

  • 1.6 使可变性最小化

  • 1.7 复合优先于继承

  • 1.8 接口优于抽象类

2.方法

  • 2.1 可变参数要谨慎使用

  • 2.2 返回零长度的数组或集合,不要返回 null

  • 2.3 优先使用标准的异常

3.通用程序设计

性能优化

1、常用的性能评价测试指标

1.1 响应时间

1.2 并发数

1.3 吞吐量

2、常用的性能优化手段

2.1 避免过早优化

2.2 进行系统性能测试

2.3 寻找系统瓶颈,分而治之,逐步优化

2.4 前端优化常用手段

  • 2.4.1 浏览器/App

  • 2.4.2 CDN 加速

  • 2.4.3 反向代理缓存

  • 2.4.4 WEB 组件分离

3、应用服务性能优化

3.1 缓存

  • 3.1.1 缓存的基本原理和本质

  • 3.1.2 合理使用缓冲的准则

  • 3.1.3 分布式缓存与一致性哈希

3.2 异步

  • 3.2.1 同步和异步,阻塞和非阻塞

  • 3.2.2 常见异步的手段

3.3 集群

3.4 应用相关

  • 3.4.1 代码级别

  • 3.4.2 并发编程

  • 3.4.3 资源的复用

  • 3.4.4 JVM

  • 3.4.5 GC 调优

  • 3.4.6 调优实战

  • 3.4.7 存储性能优化

总目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值