Java 编程性能调优
把 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对象序列化的框架
- 序列化的性能非常高
- 序列化结果体积较小
- 提供了简单易用的API
可参考地址:序列化 — Kryo序列化 - 怀瑾握瑜XI - 博客园
深入浅出序列化(2)——Kryo序列化 - 知乎
(5)、
第 2 层:多线程性能调优
目前大部分服务器都是多核处理器,多线程编程的应用广泛。为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有多线程高并发带来的性能问题,这些都会在这个层级重点讲解。
乐观锁优化并发策略(CAS、读写锁、并发锁信号量)
线程池优化(合理地设置线程池大小,避免创建过多线程)
多线程调优:wait/notify 的使用导致了较多的上下文切换
第 3 层:JVM 性能监测及调优
Java 应用程序是运行在 JVM 之上的,对 JVM 进行调优可以提升系统性能。这个层级重点讲解 Java 对象的创建和回收、内存分配等。
第 4 层:设计模式调优
在架构设计中,我们经常会用到一些设计模式来优化架构设计。这里刘超会结合一些复杂的应用场景,分享设计优化案例。
单列模式
亨元模式(针对对象重复使用)
装饰模式
第 5 层:数据库性能调优
数据库最容易成为整个系统的性能瓶颈,这里刘超会重点解析一些数据库的常用调优方法。
Java 编程性能调优相关推荐
- 《Java性能调优实战》笔记(一)Java编程性能调优、多线程性能优化
文章目录 一.Java性能调优概述 1.1 性能调优标准 1.2 制定性能调优策略 二.Java编程性能调优 2.1 字符串 2.2 正则表达式 2.3 ArrayList和LinkedList的选择 ...
- Java编程性能调优-01|字符串性能优化不容小觑,百M内存轻松存储几十G数据
一.字符串性能优化不容小觑,百M内存轻松存储几十G数据 一.String 对象是如何实现的? String str1= "abc"; String str2= new String ...
- 《Java后端性能调优实战方案手册》,看完至少阿里P7
之前有朋友说,"我们公司的系统从来都没有经过性能调优,集成测试没问题后就上线了,上线后也几乎没出现过性能问题."其实没遇到性能问题不代表程序不存在性能问题,只能说明系统的访问量有点 ...
- Java 应用性能调优实践
转自:http://www.cnblogs.com/duanxz/p/6092997.html Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应 ...
- Java 应用性能调优最强实践指南
阅读文本大概需要25分钟. 作者:张俊城, 郭理勇, 刘建 来源:https://www.ibm.com/developerworks/cn/java/j-lo-performance-tuning- ...
- Java应用性能调优工具介绍及实践
一.背景 (1).随着微服务架构的逐渐推广,一个大型的单个应用程序被拆分为数个微服务系统,这为研发人员的本地调试跟踪带来困难 (2).在微服务架构中,由于业务的复杂性,常常一个业务流程涉及好数个微服务 ...
- java jvm性能调优_java jvm性能优化
摘要: 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bit 还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般 ...
- 有了这款可视化工具,Java 应用性能调优 so easy。。。
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:朝雨忆轻尘 cnblogs.com/xifengxiaoma ...
- Java 应用性能调优,可视化工具
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:终于放弃了单调的swagger-ui了,选择了这款神器-knife4j个人原创+1博客:点击前往,查看更多 JV ...
最新文章
- 通过注册表修改VC6.0的字体【转】
- ubuntu16.04在英文状态下安装中文语言包的过程(法一:图形界面的方式) 以及 安装中文语言包后无法选择汉语问题的解决
- Codis——分布式Redis服务的解决方案
- oel6mysql_Linux7(CentOS,RHEL,OEL)和 Oracle RAC环境系列4:target(图形
- Linux stat命令显示文件的状态信息
- 单片机c语言篮球比分_基于单片机的篮球比赛计时计分器的设计
- service XXX does not support chkconfig(service报错)
- Mysql索引扫盲总结
- 传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)
- 人工智能将进入能源生产领域
- box-sizing布局(简要介绍)
- ThinkPHP5 php-jwt
- python正弦函数幂级数展开_函数展开成正弦级数或余弦级数的奇延拓
- Linux开发环境——SSH工具
- 解决Docker镜像缺少字体的问题
- ahb2apb bridge验证项目介绍
- 查找WebSphere Application Server 管理控制台端口号
- 短信验证码(俗称接码平台)分享定义是什么
- 如何将 Visual Paradigm 桌面客户端连接到不同的 VP Online 存储库丨使用教程
- 解决win10系统无法通过usb共享手机网络