Java 编程性能调优
创始人
2024-02-22 04:56:39
0

把 Java 性能调优分成 5 个层级:Java 编程、多线程、JVM 性能检测、设计模式、数据库性能,每个层级下都覆盖了最常见的优化问题。下面分别给你梳理一下

可参考地址:Java性能调优全攻略来了_着火点的博客-CSDN博客_java性能调优

第 1 层:Java 编程性能调优

JDK 是 Java 语言的基础库,熟悉 JDK 中各个包中的工具类,可以帮助你编写出高性能代码。课程从基础的数据类型讲起,涉及容器在实际应用场景中的调优,还有现在互联网系统架构中比较重要的网络通信调优。

(1)、字符串性能优化
第一: 字符串拼接       
String:适用于少量的字符串操作的情况;
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况;没有加同步锁,所以线程不安全
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况;方法加了同步锁(synchronized) ,所以是线程安全的

在实现代码中 String 类被 final 关键字修饰了, String 对象的不可变性,即 String 对象一旦创建成功,就不能再对它进行改变,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,执行速度很慢
StringBuilder和StringBuffer没有“final”修饰符,所以两种对象都是可变的。这里没有频繁的创建和回收,所以速度会很快。      

第二:在字符串拼接使用+号时,会被编译器优化成StringBuffer的方式,但是如果循环里面做+号等于每次循环生成一个新的StringBuiler实例,同样也会减低系统性能。
      String str= "ab" + "cd" + "ef";    编译器自动优化了这行代码String str= "abcdef";
    

(2)、正则表达式优化
第一:使用正确的边界匹配器(^、$、\b、\B等),限定搜索字符串位置
第二:使用正确的量词(+、*、?、{n,m}),如果能够限定长度,匹配最佳

(3)、I/O优化
1、使用缓冲区优化读写流操作
2、使用 DirectBuffer 减少内存复制
3、避免阻塞,优化 I/O 操作

(4)、序列化优化

序列化:指堆内存中的java对象数据,通过某种方式把对存储到磁盘文件中,或者传递给其他网络节点(网络传输)。这个过程称为序列化,通常是指将数据结构或对象转化成二进制的过程。

即将对象转化为二进制,用于保存,或者网络传输。


反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象模型的过程。也就是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程

与序列化相反,将二进制转化成对象

为啥要优化:
在一些包含比较大的对象比如有上百个对象的列表序列化、反序列化的逻辑中,有一个序列化+反序列化操作,他们加起来时间占据了接近1/3,由此可见为了达到高TPS,序列化的性能和大小也是不可忽视的

第一:kryo、jackson都作为json序列化工具,可以考虑kryo序列化方式,其性能比jackson高出不少,同时没有pb/flatbuffer一样的额外结构维护要求
Kryo是一个快速且高效的针对Java对象序列化的框架

  1. 序列化的性能非常高
  2. 序列化结果体积较小
  3. 提供了简单易用的API

可参考地址:序列化 — Kryo序列化 - 怀瑾握瑜XI - 博客园
深入浅出序列化(2)——Kryo序列化 - 知乎

(5)、

第 2 层:多线程性能调优

目前大部分服务器都是多核处理器,多线程编程的应用广泛。为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有多线程高并发带来的性能问题,这些都会在这个层级重点讲解。

乐观锁优化并发策略(CAS、读写锁、并发锁信号量)
线程池优化(合理地设置线程池大小,避免创建过多线程)
多线程调优:wait/notify 的使用导致了较多的上下文切换

第 3 层:JVM 性能监测及调优

Java 应用程序是运行在 JVM 之上的,对 JVM 进行调优可以提升系统性能。这个层级重点讲解 Java 对象的创建和回收、内存分配等。

第 4 层:设计模式调优

在架构设计中,我们经常会用到一些设计模式来优化架构设计。这里刘超会结合一些复杂的应用场景,分享设计优化案例。

单列模式
亨元模式(针对对象重复使用)
装饰模式

第 5 层:数据库性能调优

数据库最容易成为整个系统的性能瓶颈,这里刘超会重点解析一些数据库的常用调优方法。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...