重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

代码寻幽者
• 阅读 208

写在前面

每个公司都要求程序员写出性能良好、维护性强的代码,各种高端职位的任职要求也会把优化系统作为必选要求之一。当业务系统重构时,以及各种互联网大促前,也都期望系统的性能能变得更好。如何提高系统性能?简单的办法是升级系统硬件,或者购置更多的机器水平扩展系统,从而减少单机负荷以实现性能提高。这些办法简单粗暴,虽然效果立竿见影,但长期来看,投入大,产出小。随着系统中越来越多“坏味道”代码的堆积,这些办法的效果越来越不明显,提高单机系统的性能迫在眉睫,那么有没有优化Java系统自身的办法呢?市场上关于这方面的书籍或者聚焦于简单的开发规范,或者是纯理论的讲解。此文档尝试把Java性能优化和实际业务系统结合起来一起讲解,期望可以为读者提供一种可操作的指导来优化Java系统性能。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

01 Java系统性能优化实战内容介绍

本书分为五部分,总共11章。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第一部分是第1章到第5章

第1章通过一个不超过 10行的代码优化示例介绍 如何对Java系统进行优化,如何使用JMH验证性能优化;

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第2章和第3章介绍JDK的核心类String、Number和并发包;

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第4章通过20多个优化技巧来说明Java性能优化的各种方法;

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第5章介绍了常用的高性能工具,如Caffeine、Jackson、 HikariCP, 并对其高性能的原因做了一定的源码解析。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第二部分是第6章和第7章

不同于代码规范,这部分强调编写易于阅读的代码,会从代码注释、代码分解、面向对象三方面进行讲解。容易阅读的代码是系统性能优化的前提。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第三部分是第8章,介绍JIT优化

JIT优化对Java系统运行有深刻的影响,本章系统介绍了JIT编译器、代码缓存、内联等知识。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第四部分是第9章

包含30多个具有“坏味道”的代码片段,读者可以尝试优化代码。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第五部分是第10章和第11章

第10章介绍Java字节码和ASM,用于运行时增强Java系统;

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第11章介绍JSR269规范,用于编译时增强Java系统。通过使用这些技术,可以有效提升系统的维护性和性能。

滴滴滴!转发+关注,关注公众号:小迁不秃头,即可免费领取~~

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了


02 Java性能优化权威指南

现代大规模关键性系统中的Java性能调优,是一项富有挑战的任务。你需要关注各种问题,包括算法结构、内存分配模式以及磁盘和文件I/0的使用方式。

性能调优最困难的是找出问题,即便是经验丰富的人也会被他们的直觉所误导。性能杀手总是隐藏在最意想不到的地方。正如维基百科所言:“科学(来自拉丁文scientia,意思是‘ 知识' )是以对世界可证实的解释和预见来构建和组织知识的系统。”性能调优正是这样一门实验科学, 你需要构建和进行实验,然后根据实验结果建立理论假设。所幸实验所用的性能监控工具在Java 世界里随处可见,既有可独立运行的应用程序,也有开发环境内建的性能分析工具,还有操作系统提供的工具。综合运用这些工具,才能从数据汪洋中找出真相。

主要目录大纲:

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第1章“策略、方法和方法论”

介绍了Java性能调优实践中的各种方法、策略和方法论,并对传统软件开发过程提出了改进建议,即在软件开发中应该提前考虑软件应用的性能和可扩展性。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第2章“操作系统性能监控”

讨论了操作系统的性能监控,介绍了操作系统中重要的监控统计信息,以及如何用工具监控这些统计信息。本章涉及的操作系统包括Windows、Linux及OracleSolaris在其他基于Unix的系统(例如Mac OS X).上监控性能统计信息时,可使用与Linux或Oracle Solaris相同或类似的命令。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第3章“JVM概览"

高屋建瓴地介绍了HotSpot VM,描述了现代Java 虚拟机架构和运转的基本概念,并为后续的诸多章节奠定了基础。本章没有覆盖所有的Java 性能调优问题,也没有提供Java性能问题所需的全部背景知识。但对于绝大多数与现代Java虚拟机内部机制密切相关的性能问题,本章提供了足够多的背景知识。结合第7章的内容,有助于你领会如何进行HotSpot VM调优,本章也有助于理解第8、9章的主题,即如何编写高效的基准测试。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第4章“JVM性能监控”

顾名思义,涵盖了JVM性能监控的相关内容,介绍了重点需要监控的JVM统计数据,以及监控这些统计数据的工具。本章最后指出,这些工具扩展之后可以一并监控JVM和Java应用的统计数据。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第5章“Java应用性能分析”与第6章“Java 应用性能分析技巧”讲述性能分析。

这两章可看成第2章和第4章性能监控的补充。性能监控通常用来考察是否存在性能问题,或者为定位性能问题提供线索,告诉人们问题是出在操作系统、JVM、Java 应用程序还是其他地方。一旦发现性能问题,并进一步通过性能监控定位之后,通常就能进行性能分析了。第5章介绍分析Java方法和Java 堆(内存)的基本技术,还推荐了一些免费 工具来说明这几种性能分析技术背后所蕴藏的概念。本章提及的工具并不是性能分析仅有的手段,还有许多商业或者免费的工具也能提供类似的功能,其中一 些工具的功能甚至超出了第5章涉及的技术范围。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第6章提供了一些技巧

用来识别一些常见的性能分析模式,这些模式指示了一些特定类型的性能问题。本章所列的经验和技巧并不完整,却是作者在多年Java 性能调优过程中经常碰到的。附录B中包含了第6章大部分示例的源代码。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第7章“JVM性能调优入门”

涵盖了HotSpot VM性能调优的诸多方面,包括启动、内存占用、响应时间/延迟以及吞吐量。第7章介绍了调优的一系列步 骤,包括选择哪个JIT编译器,选用何种垃圾收集器,怎样调整Java堆,以及如何改动应用程序以符合干系人设定的性能目标。对于大多数读者来说,第7章可能是本书中最有用和最值得参考的章节。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

第8章“Java应用的基准测试”和第9章“多层应用的基准测试”

探讨如何编写高效的基准测试。通常来说,基准测试是通过应用程序的功能子集来衡量Java 应用的性能。这两章还将展示创建高效Java 基准测试的艺术。第8章涵盖了与编写高效基准测试相关的较通用的主题,例如探讨现代JVM的一-些优化方法,还介绍了如何在基准测试中运用统计方法以增强基准测试的准确性。第9章则重点关注如何编写高效的Java EE基准测试。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

有些读者对Java EE应用的性能调优特别感兴趣,第10 章“Web应用的性能调优”、第11章“Web Service的性能”及第12章“Java 持久化和Enterprise Java Bean的性能”,分别着重介绍了Web应用、Web Service、持久化及Enterprise Java Bean的性能分析。这3章会深入分析Java EE应用中常遇到的性能问题,并为常见的Java EE性能问题提供建议或解决方案。

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

写在最后

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

“对Java程序做性能优化,不仅要对应用的代码实现有足够的了解,还需要对更底层的OS、JVM有较深的了解。Java程序员也需要掌握的OS、JVM层面的很多知识;更吸引人的是,结合经验,为大家总结了一些性能优化的模式, 例如CPU利用率高的时候需要怎么进行优化,这些模式让人受益匪浅,相信读过后能对大家8常工作中做性能优化提供不小的帮助。

如何领取?

**————转发+关注,关注公众号:小迁不秃头,即可免费领取~

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
(绝对有用)iOS获取UUID,并使用keychain存储
UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。(我整理的解决办法的参
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这