Java身为当前比较热门的编程语言之一,随着Java的持续发展,Java早已经不是一种编程语言了,它更加像是一个交流的平台、一种值得我们学习的文化、一股把我们汇聚到一起的力量。
在我们是日常生活中它有着举足轻重的作用,而今天给大家带来的这本《Java程序性能优化实战》在Java界更是有着不可撼动的地位,里面的内容包括有Java性能调优概述,设计优化,Java程序优化,并行程序开发及优化,JVM调优和Java性能调优工具等五大节内容。接下来就由我带领大家一起来学习吧。(获取方式留在文末了)
第1章 Java性能调优概述
本章将对性能优化技术进行整体性概述,让读者了解性能的概念和性能优化的基本思路和方法。本章涉及的主要知识点有:
·评价性能的主要指标;
·木桶原理的概念及其在性能优化中的应用;
·Amdahl定律的含义;
·性能调优的层次;
·系统优化的一般步骤和注意事项。
1.1 性能概述
为什么程序总是那么慢?它现在到底在干什么?时间都耗费在哪里了?
1.1 性能概述
1.2 性能调优的层次
为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化。
1.2 性能调优的层次
1.3 基本调优策略和手段
存在性能问题的系统,十有八九是由某一系统瓶颈导致的。只要找到该性能瓶颈,分析瓶颈的形成原因,对症下药,使用合理的方法解决系统瓶颈,就能从根本上提升性能。
第2章 设计优化
本章主要介绍与软件设计相关的性能优化方法和思想。软件的结构对系统的整体性能有着重要的影响,优秀的设计结构可以规避很多潜在的性能问题,对系统性能的影响可能远远大于对代码的优化。本章涉及的主要知识点有:
·单例模式的使用和实现;
·代理模式的实现和深入剖析;
·享元模式的应用;
·装饰者模式对性能组件的封装;
·观察者模式的使用;
·使用值对象模式减少网络数据传输;
·使用业务代理模式添加远程调用缓存;
·缓冲和缓存的定义与使用;
·对象池的使用场景及其基本实现;
·负载均衡系统的构建及Terracotta框架的简单使用;
·时间换空间和空间换时间的基本思路
2.1 善用设计模式
设计模式是前人工作的总结和提炼。
2.2 常用的优化组件和方法
本节主要介绍用于系统性能优化的组件和性能优化思想。
第3章 Java程序优化
本章主要介绍在代码层面优化Java应用程序的方法。与设计优化相比,程序级别的优化更具技巧性。本章涉及的主要知识点有:
·Java语言中的字符串优化,以及如何更高效地使用字符串;
·Vector和ArrayList等核心数据结构的优化方法;
·在Java语言中使用NIO提高I/O性能,摆脱最大堆束缚;
·Java中的引用类型及其使用方法;
·一些有助于提高系统性能的技巧。
3.1 字符串优化处理
字符串是软件开发中最为重要的对象之一。
3.2 核心数据结构
为方便开发人员进行程序开发,JDK提供了一组主要的数据结构,如List、Map和Set等常用结构。
3.3 使用NIO提升性能
在软件系统中,由于I/O的速度比内存速度慢,因此I/O读写在很多场合都会成为系统性能的瓶颈。
3.4 引用类型
在Java中提供了4个级别的引用:强引用、软引用、弱引用和虚引用。
3.5 性能测试工具JMH
JMH是一个Java基准测试工具,用于测试一段程序的性能。
3.6 有助于改善性能的技巧
程序的性能受到代码质量的直接影响。
第4章 并行程序开发及优化
本章主要介绍基于Java的并行程序开发及优化方法。本章涉及的主要知识点有:
·常用的多线程设计模式,如Future模式、Master-Worker模式、
Guarded Suspension模式、不变模式和生产者-消费者模式;
·JDK内置的多线程框架和各种线程池;
·JDK内置的并发数据结构;
·Java的并发控制方式,如内部锁、重入锁、读写锁、ThreadLocal
变量、信号量等;
·有关“锁”的一些优化方法;
·使用无锁的方式提高并发程序的性能;
·使用轻量级的协程获得更高的并行度。
4.1 并行程序设计模式
并行程序设计模式属于设计优化的一部分,它是对一些常用的多线程结构的总结和抽象。
4.2 JDK多任务执行框架
为了给并行程序开发提供更好的支持,Java不仅提供了Thread类和Runnable接口等简单的多线程支持工具,而且为了改善并发程序性能,在JDK中还提供了用于多线程管理的线程池。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VIICv8e3-1654072716921)(https://upload-images.jianshu.io/upload_images/27964194-d1b8aedce489c719.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
4.3 JDK并发数据结构
由于并行程序与串行程序的不同特点,适用于串行程序的一些数据结构可能无法直接在并发环境下正常工作,这是因为这些数据结构不是线程安全的。
4.4 并发控制方法
并行程序开发将不可避免地要涉及多线程、多任务间的协作和数据共享等问题。
4.5 锁的性能和优化
锁是最常用的同步方法之一。在高并发环境下,激烈的锁竞争会导致程序的性能下降。
4.6 无锁的并行计算
为了确保程序和数据的线程安全,使用锁是最直观的一种方式。但是在高并发时,对锁的激烈竞争可能会成为系统的瓶颈。
4.7 协程
与进程相比,线程是一个较为轻量级的并行程序解决方案。
第5章 JVM调优
本章主要介绍JVM虚拟机层面的性能调优方法。由于Java字节码是运行在JVM虚拟机上的,所以同样的字节码使用不同的JVM虚拟机参数运行,其性能表现可能各不一样。本章涉及的主要知识点有:
·JVM内存模型结构;
·与内存分配(尤其是堆分配)相关的JVM参数;
·垃圾回收器的种类及使用方法;
·常用的JVM调优参数及其使用效果;
·一个JVM调优实例。
5.1 Java虚拟机内存模型
Java虚拟机内存模型是Java程序运行的基础。
5.2 JVM内存分配参数
JVM内存结构分配对Java应用程序的性能有较大的影响。
5.3 垃圾收集基础
Java语言的一大特点就是可以进行自动垃圾回收处理,开发人员无须过于关注系统资源(尤指内存资源)的释放情况。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RkgUAviI-1654072716929)(https://upload-images.jianshu.io/upload_images/27964194-d1d25c213231e7c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
5.4 常用调优案例和方法
在前文中已经较为详细地介绍了JVM的各项参数功能。
5.5 实用JVM参数
在本书中,已经分类介绍了不少JVM参数,例如与内存分配、垃圾回收、多线程相关的各项调优参数。
5.6 JVM调优实战
Tomcat服务器是一个免费的开放源代码的Web应用服务器。
第6章 Java性能调优工具
为了能准确获得程序的性能信息,需要使用各种辅助工具。本章涉及的主要知识点有:
·Linux平台上获取性能指标的主要命令;
·Windows平台上获取性能指标的工具;
·JDK自带的获取Java程序堆信息和线程信息的相关工具;
·MAT内存分析工具及一些商业性能调优工具;
·用于分析堆快照的对象查询语言(OQL)。
6.1 Linux命令行工具
Linux平台是使用最为广泛的服务器平台之一,不少Java端程序都运行在类Linux平台(如AIX、Solaris等)上。
6.2 Windows工具
作为桌面市场的引领者,Windows平台上也运行着大量的Java应用程序。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
6.3 JDK命令行工具
在JDK的开发包中,除了大家熟知的java.exe和javac.exe外,和一系列辅助工具。
6.4 JConsole工具
JConsole工具是JDK自带的图形化性能监控工具。
6.5 Visual VM多合一工具
Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具。
6.6 Visual VM对OQL的支持
6.5.6节已经简单地介绍了如何通过Visual VM查看堆内存快照中的对象信息。
6.7 MAT内存分析工具
MAT是Memory Analyzer Tool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况。
6.8 MAT对OQL的支持
MAT的OQL语法与Visual VM支持的OQL有很大的区别。
6.9 来自JRockit的礼物——JMC
在Oracle收购Sun之前,Oracle的JRockit虚拟机提供了一款叫作JRockit Mission Control的虚拟机诊断工具。