返回顶部
首页 > 资讯 > 数据库 >java性能优化笔记(一)概述
  • 707
分享到

java性能优化笔记(一)概述

2024-04-02 19:04:59 707人浏览 安东尼
摘要

性能参考指标:执行时间: 程序从开始到结束的执行时间。CPU时间: 函数或者线程占用的cpu时间。内存分配: 程序运行期间所占内存。磁盘吞吐量: 硬盘I/O使用情况。网络吞吐量: 网络使用情况。响应时间:用

性能参考指标:

  • 执行时间: 程序从开始到结束的执行时间。

  • CPU时间: 函数或者线程占用的cpu时间。

  • 内存分配: 程序运行期间所占内存。

  • 磁盘吞吐量: 硬盘I/O使用情况。

  • 网络吞吐量: 网络使用情况。

  • 响应时间:用户行为做出的响应时间,越短性能越好。

短板原理:

一直木桶能装多少水取决于桶壁最短的那个木板。 
产生短板的资源有:

  • 磁盘I/O:很多应用大部分瓶颈在硬盘的I/O,硬盘比内存慢很多。如果等待磁盘读写完成会浪费大量CPU时间,拖累整个系统。

  • 网络请求:由于网络不稳定或拥塞控制等都会降低网络请求效率,如果等待网络请求结束或者超时时间设置过长会浪费大量CPU时间,拖累整个系统。

  • CPU:一些运算对CPU直接或者不间断占用很大,CPU密集型应用会在CPU上产生瓶颈。

  • 程序异常:对于java应用,异常产生构造异常栈并加以处理是很耗费资源的,高频率出现异常会拖垮整个系统。

  • 数据库:关系型数据库在存盘读盘操作(即磁盘I/O操作),更新索引等待和竞争都会产生瓶颈。

  • 锁竞争:高并发应用线程之间互相锁的竞争,线程上下文切换都是很大的开销。

  • 内存:内存使用nand flash读写速度很快,但如果应用程序和操作系统把内存占满,会导致交换分区的使用,内存数据与硬盘交换分区交换数据会产生(即磁盘I/O)瓶颈。

上述瓶颈基本解决方案:

  • 磁盘I/O:使用NIO、零拷贝、mmap映射等技术,尽量异步读写硬盘,使用缓存和缓冲区技术。使用SSD硬盘,使用RaiD技术提高写入性能。

  • 网络请求:CDN或PCDN加速、缓存、合并请求、压缩报文,尽量异步网络请求(消息队列服务、master-worker等),使用Nio。加大带宽、升级网卡。

  • CPU:持续优化代码,利用好多线程或多进程,设计合理架构,拆分业务,减少单机复杂运算,避免复杂运算和业务请求掺杂在一起。

  • 异常:处理好边界、缓冲区等,尤其需要注意避免出现NullPointException,测试时间大于开发时间减少bug出现几率。

  • 数据库:优化sql语句,注意执行计划,使用缓存代替数据库部分功能,根据情景使用合理的存储引擎,注意锁,使用连接池,使用PrepareStatment。

  • 锁竞争:尽量减少锁竞争,可以使用无锁的copy-on-write、重入锁等技术。

  • 内存:优化代码,分析内存占用情况,合理配置GC。增大物理内存。

Amdahl定律:

加速比公式:加速比=优化前耗时/优化后耗时 
Speedup ≤ 1/(F+(1-F)/N) 
- Speedup:加速比 
- F:串行化比重 
- N:CPU数量 
根据Amdahl定律,优化的效果取决于CPU数量以及系统中串行化程序比重,CPU数量越多,串行比越低,优化效果越好。

性能调优层次

  • 设计调优:对整体架构进行梳理,找出短板进行优化,适当使用设计模式和以往经验。详细进行系统设计。

  • 代码调优:熟悉基本api、第三方类库的原理,选择最适当和最优秀的算法,精简实现,面向接口。

  • JVM调优:熟悉jvm内存模型,字节码等深层技术,使用常用监控工具如:visualVM、Jconsole等。进行压测,调节gc和堆栈大小。

  • 数据库调优:对sql语句进行调优,分析执行计划,对数据库系统配置调优(缓冲区、共享区、连接池等),对数据库设计进行调优(冗余、索引、分库分表、读写分离等)

  • 操作系统调优:调节句柄数、关闭没用服务和端口、调节共享内存、调节交换分区大小等。

最后需要注意:不要因为优化而优化!


您可能感兴趣的文档:

--结束END--

本文标题: java性能优化笔记(一)概述

本文链接: https://lsjlt.com/news/43375.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java性能优化笔记(一)概述
    性能参考指标:执行时间: 程序从开始到结束的执行时间。CPU时间: 函数或者线程占用的cpu时间。内存分配: 程序运行期间所占内存。磁盘吞吐量: 硬盘I/O使用情况。网络吞吐量: 网络使用情况。响应时间:用...
    99+
    2024-04-02
  • MySql5.6性能优化学习笔记
    目标 了解什么是优化 掌握优化查询的方法 掌握优化数据库结构的方法 掌握优化MySQL服务器的方法 什么是优化? 合理安排资源、调整系统参数使MySQL运行更快、更节省资源。...
    99+
    2024-04-02
  • java学习笔记_关于字符串概述
    一、String类String类代表字符串,是由字符构成的一个序列。创建String对象的方法很简单,有以下几种:1)用new来创建:String s1 = new String("my name is tongye");...
    99+
    2023-05-31
    java 字符串 ava
  • PHP学习笔记:性能优化与缓存技术
    一、引言在开发和运维PHP应用程序时,性能优化是一个重要的考虑因素。随着用户量的增加,应用程序的负载可能会迅速增大,这会导致响应时间延长,甚至导致服务器崩溃。为了提供更好的用户体验和稳定的系统性能,我们需要采取一些性能优化的策略和技术。本文...
    99+
    2023-10-21
    性能优化 缓存技术 PHP
  • Python 数组 path 学习笔记:如何优化数组性能?
    Python 中的数组是一种非常常见的数据结构,它可以用来存储一系列的元素,并且支持随机访问和修改。在实际编程中,我们经常需要对数组进行一些操作,如查找、插入、删除等,而这些操作的效率往往会对程序的性能产生很大的影响。因此,如何优化数组性...
    99+
    2023-08-19
    数组 path 学习笔记
  • Android性能优化(一)启动优化
            以前做手机的时候,我非常重视app的性能优化。其实一直以来,在工作中我总会去强调性能优化的重要性。但是,很多时候,由于一些外界因素,我们对app的一些性能指标不...
    99+
    2022-06-06
    启动 优化 Android
  • DC/DC开关电源学习笔记(一)开关电源技术概述
    (一)开关电源技术概述 1.什么是开关电源?2.开关电源技术概述2.1 小型化、薄型化、轻量化、高频化2.2 高可靠性2.3 低噪声2.4 采用计算机辅助设计和控制 1.什么是开关电源? 开关模式电源(Switch Mode...
    99+
    2023-08-30
    学习 笔记 硬件工程
  • Oracle性能优化-SQL优化(案例一)
    Oracle 性能优化 -SQL 优化 ( 案例一 ) 环境: OS:Red Hat Enterprise Linux AS release 4 DB:Oracle 10.2.0.1.0 ...
    99+
    2024-04-02
  • oracle性能优化(项目中的一个sql优化的简单记录)
    在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性。其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了。本文主要记录在实际项目中,一个需要查询很慢的sql的优化过程,如果有更...
    99+
    2015-11-21
    oracle性能优化(项目中的一个sql优化的简单记录)
  • PHP学习笔记:性能分析与调优
    引言:在Web开发中,性能是一个非常关键的因素。一个高性能的网站能够提供更好的用户体验,提高用户留存率,增加业务收入。而在PHP开发中,性能的优化是一个常见且重要的问题。本文将介绍PHP中性能分析与调优的方法,并提供具体的代码示例,帮助读者...
    99+
    2023-10-21
    调优 性能分析 PHP学习
  • PHP数组存储学习笔记:如何优化数组的性能?
    在PHP中,数组是一个非常重要的数据类型。它可以存储一组相关的数据,并且可以通过索引访问每个数据项。但是,在处理大型数组时,可能会遇到性能问题。本文将介绍如何优化PHP数组的性能,以便更高效地处理大型数据集。 一、避免多维数组 PHP中的...
    99+
    2023-08-05
    存储 学习笔记 数组
  • 性能优化指南:性能优化的一般性原则与方法
    【本文转自博客园 作者:xybaby 原文链接:https://www.cnblogs.com/xybaby/p/9055734.html】作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应...
    99+
    2023-06-05
  • 性能优化一点总结
    个人管理方面1、形成体系化的思想。当做一件事(开发一个系统、解决一个问题)的时候,可以按照一定的体系去下手,这个体系可以理解为思维意识。少了很多无从下手、从零开始的过程,从而提升效率。这一点事需要个人长久的...
    99+
    2024-04-02
  • Oracle AWR性能优化一例
    有一个批处理程序运行超过24小时仍然不能完成,采集了程序运行期间的AWR报告如下。 由上可以看到,该系统为AIX的单实例数据库,采样时长1319.96 分钟,DB time 1532.15分钟。 看一下TO...
    99+
    2024-04-02
  • Go语言中数组如何优化性能?学习笔记带你走进优化之路!
    数组是计算机科学中最基本的数据结构之一。在Go语言中,数组是一个固定长度、由相同类型元素组成的序列。在一些高性能的场景中,如图形处理、游戏开发、大规模数据处理等,数组的性能优化显得尤为重要。本篇文章将介绍Go语言中数组的性能优化方法,带你...
    99+
    2023-10-20
    数组 学习笔记 http
  • java性能优化之代码缓存优化
    目录JIT编译器版本默认情况JVM如何选择编译器?如何判断当前环境jvm使用的编译器?代码缓存代码缓存占满发生在什么情况?代码缓存默认大小如何确定正好的代码缓存?如何监控代码缓存?J...
    99+
    2024-04-02
  • java equalsignorecase性能怎么优化
    在Java中,可以使用以下方法来优化equalsIgnoreCase的性能:1. 尽量避免在循环中使用equalsIgnoreCas...
    99+
    2023-09-23
    java
  • 大数据与PHP学习笔记:如何优化Apache服务器性能?
    随着大数据时代的到来,数据的处理和管理变得越来越重要。而PHP作为一种在Web开发中广泛使用的编程语言,与Apache服务器配合使用可以实现高效的数据处理和管理。本文将介绍如何优化Apache服务器性能,提高数据处理和管理的效率。 一、A...
    99+
    2023-11-02
    学习笔记 大数据 apache
  • Android性能优化(一)App启动时间优化
    App启动时间优化 一、首先我们需要清楚App的主题加载 你的App的主题位于 res/values/styles 我们点击Light主题进...
    99+
    2022-06-06
    app启动 优化 app Android
  • Linux系统日志记录:如何优化Java并发性能?
    在开发高并发系统时,如何优化Java并发性能是一项非常关键的任务。在这个过程中,Linux系统日志记录是一个不可忽略的因素。本文将介绍如何使用Linux系统日志记录来优化Java并发性能。 1.了解Linux系统日志记录 Linux系统日...
    99+
    2023-10-28
    并发 linux 日志
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作