Java 编程性能调优

news2024/11/28 8:48:03

把 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 层:数据库性能调优

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件设计与体系结构编程题汇总

现在需要开发一款游戏软件,请以单例模式来设计其中的 Boss 角色。角色的属性和动作可以任意设计。 要求:该 Boss 类可以在多线程中使用。( 8 分) Public class Boss{Private static Boss instance; //(2 分)Private …

vivo大数据日志采集Agent设计实践

作者:vivo 互联网存储技术团队- Qiu Sidi 在企业大数据体系建设过程中,数据采集是其中的首要环节。然而,当前行业内的相关开源数据采集组件,并无法满足企业大规模数据采集的需求与有效的数据采集治理,所以大部分企业都…

车间工厂看板还搞不定,数据可视化包教包会

在智能工厂的建设过程中,为了让每条生产线的生产进度和状态更加清晰,经常需要将生产信息情况显示在电视看板上,称为智能工厂-车间数据可视化大屏方案。 根据工厂和车间的大小,可能会使用 10到100 台甚至更多的电视看板来显示数据…

Nexus3搭建maven私服

Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问,也就是我们常说的私服 1、下载nexus3.x: Nexus官方下载地址 官方下载极其慢,这里提供网盘下载: 链接https://pan.baidu.com/s/…

Briefings in bioinformatics2021 | MolGNet+:基于分子全局表征的高效自监督框架,用于药物发现

原文标题:An effective self-supervised framework for learning expressive molecular global representations to drug discovery 代码:https://github.com/pyli0628/MPG.git 一、问题提出 (分子性质预测的背景都是老生常谈的&#xff0…

loam 框架流程描述

前端流程(scanRegistration.cpp) 多线激光雷达即有多个激光发射器同时工作,如常见的 Velodyne16,就是共有 16 个激光发射器,一般这些发射器竖排排列,然后一起水平旋转。 激光雷达在一定的时间内旋转一圈,即一帧的点云数据。值得注…

Flutter教程之使用不同的方法维护 Flutter 应用程序状态

在开发应用程序时,主要关注的是当我们使用Tabs或Bottom Navigation Bar类的Widgets (Flutter 中几乎所有东西都是 widgets)时我们的应用程序将如何执行。 至于示例,让我们考虑一下我们有三个选项卡 UsersTab2Tab3在BottomNavBar和第一个索引上,我们有一个API 调用请求,它…

高效!启科量子线路模拟器 QuSprout 与 Amazon HPC 集成,赋能量子计算

KY1, Bertran Shao2, Adam Sun Amazon HERO;2.开发者生态负责人;3.Solutions Architect2022.11.17,启科量子正式开源其内部团队研发的量子线路模拟器:QuSprout 软件。结合早前其开源的启科量子编程框架 QuTrunk,开发者…

能源与经济面板数据集(中国能源统计年鉴面板数据+区域经济、人口与二氧化碳排放量面板数据)

一、中国能源统计年鉴面板数据 1、数据来源:中国能源统计年鉴 2、时间跨度:1991-2020 3、区域范围:全国 4、指标说明: 部分数据如下: 能源平衡表: 部分指标如下: 国内生产总值增长速度&am…

HTML网页设计制作——响应式网页影视动漫资讯bootstrap网页(9页)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

地图轨迹跟踪系统设计与实现(Android+Eclipse+APP)

目 录 1 在线地图轨迹APP概述 1 1.1 本论文的背景及意义 1 1.2 本论文的主要方法和研究进展 1 1.3 本论文的主要内容 1 1.4 本论文的结构安排 1 2 系统分析 3 2.1 研究目标 3 2.2 可行性分析 3 2.2.1 经济可行性 3 2.2.2 技术的可行性 3 2.3 需求分析 3 2.4 性能分析 4 3 系统开…

TPAMI 2022 | 自动搜索文本识别网络的高性能特征提取器

©PaperWeekly 原创 作者 | 陈卓群单位 | 清华大学论文标题:Searching a High Performance Feature Extractor for Text Recognition Network收录情况:TPAMI论文链接:https://ieeexplore.ieee.org/document/9887897代码链接:…

HTTPS(对称加密+非对称加密+证书)

目录 1. 加密和解密 HTTPS工作过程 2. 对称加密 3. 对称加密 4. 既然都有非对称加密了,那为啥还要有对称加密 5. 中间人攻击 6. 引入证书 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在…

笔记本电脑恢复删除数据的5种方法

我们都知道笔记本电脑比台式电脑拥有方便携带的优势,但是不论是笔记本还是台式电脑,难免会出现数据丢失情况,如最近有位小伙伴,不小心将自己出差需要使用的工作资料误删了,那么问题来了,笔记本数据删除怎么…

Vuex的搭建与使用

Vuex 专门在Vue中实现集中式状态(数据)管理的插件 (Vue.use(Vuex)),对Vue应用中多个组件的共享状态进行集中式的管理(读、写),也是一种组件间通信的方式,且适用于任意组件间通信。 如果多个组…

git的使用规范及技巧总结

一、什么是Git? Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#x…

聚观早报 | 黑五电子产品销售额飙升;谷歌不满微软收购动视暴雪

今日要闻:黑五电子产品销售额飙升;谷歌不满微软收购动视暴雪;特斯拉海外充电站价格下降;欧盟对微软发起反垄断调查;小米13渲染图曝光黑五电子产品销售额飙升 据消息,Adobe数据和分析部门Adobe Analytics发布…

Navicat Premium 16 连接Oracle注意事项

起因 新同学使用的新版本的Mac电脑 但是装的W系统M芯片 发现 PLSQL Developer 并不兼容 导致无法连接到Oracle数据 就临时换成Navicat Premium 16进行连接 然后就出现了一系列问题 Oracle默认编码集 ZHS16GBK 该问题是Navicat Premium默认使用Navicat自带的instantclient_…

激光雷达发射的PCB布局

1、激光发射的电路如下图所示。 重点就是要考虑电容、GaN、激光器三部分的布局。 2>第一种布局方式 激光器、GaN、电容三者都在同一层上,放电的回路也都在顶层上,此时临近的第二层没有铺地。 用ANSYS仿真得到此时得回路电感为2nH左右。我们都以500M时得寄生电感来评估。…

面试官:介绍一下 Redis 三种集群模式

小码今天去面试。 面试官:给我介绍一下Redis集群, 小码:啊,平时开发用的都是单机Redis,没怎么用过集群了。 面试官:好的,出门右转不谢。 小码内心困惑:在小公司业务量也不大&…