Java程序性能优化之性能概述
性能的基本概念
一)、什么叫程序的性能?
程序运行所需的内存和时间。
二)、性能的表现形式:
1).执行速度: 程序的反应是否迅速,响应时间是否足够短。
2).启动时间:程序从运行到可以处理正常业务所需要的时间。
3).内存分配: 内存分配是否合理,是否过多的消耗内存或者存在泄露
4).负载承受能力: 当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓。
三)、衡量性能的基本指标:
1).执行时间:一段代码从开始到结束所需的时间。
2).CPU时间:函数或线程占用CPU的时间。
3).内存分配:程序在运行时所占用内存的空间。
4).磁盘吞吐量:磁盘I/O的使用情况。
5).网络吞吐量:网络的使用情况。
6).响应时间:系统对某用户行为或者事件作出响应的时间。
四)、木桶原理
什么叫木桶原理?
一个木桶能乘多少水不取决于最高的那块木板,而取决于最短那一块。
一个系统的总体性能不取决于系统性能表现最好的组件,而取决于性能表现最差的组件。
五)、什么叫性能瓶颈?
木桶中最短的那一个木板,影响系统的总体性能,系统性能表现最差的组件。
六)、系统的性能瓶颈类型:
根据应用的特点不同,任何计算机资源都有可能成为系统瓶颈。
七)、可能成为系统瓶颈的计算资源:
1).磁盘I/O: 读写速度慢。
2).网络操作: 网络环境的不确定性,会导致网络操作速度慢。
3).CPU: 对资源要求较高的应用,长时间、大量的占用资源,对CPU的争夺也会导致性能问题。
4).异常: 异常的捕获和处理非常消耗资源。
5).数据库: 海量数据的读写操作相当费时。
6).锁竞争: 锁竞争会明显增加线程上下文的开销。
7).内存: 内存大小不足,应用程序只能尽可能的将常用的核心数据读入内存。
八)、Amdahl(阿姆达尔)定律
参考:https://blog.csdn.net/thinkpad_zj/article/details/80240787
定义了加速比与系统并行度和处理器数量的关系
加速比:
加速比 = 1 / ( 串行化比重 + (并行化比重 / cpu数量))
加速比越高,程序性能优化越好。
程序性能优化效果取决于串行化比重和cpu数量,串行化比重越低,CPU数量越多,则优化效果越好。
串行: 只能一个人去做这件事
例如:烧开水,烧一壶开水 ,水开时间要2分钟,你增加多几个人在那里烧,但开水开的时间是不可变的。
并行: 可以多个人去干这件事
例如:扫地,一个人需要2分钟,多加一个人要1分钟,人越多扫地用时越短
九)、性能调优
性能调优的分类:
1).设计调优: 在软件开发前执行,评估系统的潜在问题,规避某一组件的执行问题
2).代码调优: 在软件开发过程中,在软件开发完成后,在软件维护过程中对程序代码进行改进和优化
要求:熟悉相关的语言的API, 对算法,数据结构灵活运用
3).JVM调优: 系统运行期, 设置合理的JVM启动参数
JVM是java软件的运行平台,JVM的各项参数会直接影响java程序的性能。例如:JVM堆的大小、
垃圾回收策略
要求:了解JVM的运行原理和基本内存结构。
4).数据库调优:
4.1 、在应用层对sql语句进行优化
例:在对大量拥有相同结构的查询使用PrepareStatement,不使用statement
在使用select查询时,避免使用星号
4.2、对数据库进行优化
建立具有良好表结构的数据库
例:使用表分区技术,建立索引
4.3、对数据库软件进行优化
例:设置合理大小的共享池、缓存缓冲区
5).操作系统调优
十)、性能优化的步骤
确立性能目标 -----》 对软件进行性能测试 -------- 》若未达到性能目标 ------- 》找出系统瓶颈并改进 ----- 》继续测试 ----- 》直至达到所需的性能目标
Java程序性能优化之性能概述的更多相关文章
- 性能优化 | JVM性能调优篇——来自阿里P7的经验总结
VM 调优概述: 性能定义: 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标. 延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收 ...
- MYSQL之性能优化 ----MySQL性能优化必备25条
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- Android 性能优化 五 性能分析工具dumpsys的使用
Android提供的dumpsys工具能够用于查看感兴趣的系统服务信息与状态,手机连接电脑后能够直接命令行运行adb shell dumpsys 查看全部支持的Service可是这样输出的太多,能够通 ...
- 前端性能优化jQuery性能优化
一.使用合适的选择器 $("#id"); 1.使用id来定位DOM元素无疑是最佳提高性能的方式,因为jQuery底层将直接调用本地方法document.getElementById ...
- Java程序员常用Linux性能分析命令
性能分析 vmstat 虚拟内存统计 用法 Usage: vmstat [options] [delay [count]] Options: -a, --active active/inactive ...
- 并发系列2-大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?【石杉的架构笔记】
- Android性能优化-线程性能优化
原文链接:Better Performance through Threading 线程的性能 熟练使用Android上的线程可以帮助你提高应用程序的性能. 本篇文章讨论了使用线程的几个方面:使用UI ...
- SqlServer性能优化 手工性能收集动态管理视图(三)
动态管理视图: 具体的实例语句: --关于语句执行的基本情况 select * from sys.dm_exec_query_stats --动态管理函数 需要提供参数 select top 1 ...
- php性能优化 --- laravel 性能优化
1.laravel官方提供了一些优化(laravel 5.* 版本): (1).关闭debug,修改 .env 的 APP_DEBUG=false (2). sudo php artisan ...
随机推荐
- Yii2.0教程应用结构篇 —— 入口脚本
入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本.终端用户的请求通过入口脚本实例化应用并将将请求转发到应用. Web 应用的入口脚本必须放在终端用户能够访问的 ...
- C++ 大作业资料总结
一般 C++ 大作业都是用 Qt 来写,Qt 本身带了很多例子,详见:https://doc.qt.io/qt-5/qtexamples.html# 如果你想偷懒的话,直接拿来改就好,或者去 Gith ...
- 使用face-api.js实现人脸识别(一)
功能 第一阶段实现对图片中人脸的识别并打上标签(比如:人名) 第二阶段使用摄像头实现对人物的识别,比如典型的应用做一个人脸考勤的系统 资源 face-api.js https://github.com ...
- The value for the useBean class attribute is invalied
JSP: The value for the useBean class attribute XXX is ...
- QlikSense 2018.2月版起支持主题开发
自定义主题开发 // 主题是qliksense 2018年2月版提出,4月版正式实施,其实就是去修改sense默认的.json文件和.css文件 { // 定义自定义主题是否从默认主题(Sense C ...
- expect实现自动输入密码功能
系统: Ubuntu:16.04 安装expect: sudo apt-get update sudo apt-get install expect 脚本实例: //这一行告诉操作系统脚本里的代码使用 ...
- 通过 Django Pagination 实现简单分页
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面, ...
- Bootstrap布局基础
1.栅格系统(布局)Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅 ...
- 利用AXI VDMA实现OV5640摄像头采集笔记(二)
导读:摄像头采样图像数据后经过VDMA进入DDR,通过PS部分控制,经过三级缓存,将DDR中保持的图形数据通过VDMA发送出去.在FPGA的接收端口产生VID OUT时序驱动HDMI显示器显示图形. ...
- [考试反思]1027csp-s模拟测试90:自我
其实这套题很好. 但是这次,在T1爆炸的同时,T2和T3并没有出现能弥补的表现. 在AK仍然存在的同时,我居然连一个AC都没有. 所以最后就是一无是处的一场. 考试结束前估分:100+100+30=2 ...