性能的基本概念

一)、什么叫程序的性能?

程序运行所需的内存和时间。

二)、性能的表现形式:

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程序性能优化之性能概述的更多相关文章

  1. 性能优化 | JVM性能调优篇——来自阿里P7的经验总结

    VM 调优概述: 性能定义: 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标. 延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收 ...

  2. MYSQL之性能优化 ----MySQL性能优化必备25条

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  3. Android 性能优化 五 性能分析工具dumpsys的使用

    Android提供的dumpsys工具能够用于查看感兴趣的系统服务信息与状态,手机连接电脑后能够直接命令行运行adb shell dumpsys 查看全部支持的Service可是这样输出的太多,能够通 ...

  4. 前端性能优化jQuery性能优化

    一.使用合适的选择器 $("#id"); 1.使用id来定位DOM元素无疑是最佳提高性能的方式,因为jQuery底层将直接调用本地方法document.getElementById ...

  5. Java程序员常用Linux性能分析命令

    性能分析 vmstat 虚拟内存统计 用法 Usage: vmstat [options] [delay [count]] Options: -a, --active active/inactive ...

  6. 并发系列2-大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?【石杉的架构笔记】

  7. Android性能优化-线程性能优化

    原文链接:Better Performance through Threading 线程的性能 熟练使用Android上的线程可以帮助你提高应用程序的性能. 本篇文章讨论了使用线程的几个方面:使用UI ...

  8. SqlServer性能优化 手工性能收集动态管理视图(三)

    动态管理视图: 具体的实例语句:  --关于语句执行的基本情况 select * from sys.dm_exec_query_stats --动态管理函数  需要提供参数  select top 1 ...

  9. php性能优化 --- laravel 性能优化

    1.laravel官方提供了一些优化(laravel 5.* 版本): (1).关闭debug,修改 .env 的  APP_DEBUG=false    (2).  sudo php artisan ...

随机推荐

  1. oracle中创建用户、角色、权限简单使用

    Oracle关于用户.权限.角色简单使用 创建数据库用户(在system用户下)create user 用户名 identified by 密码; 授权grant 权限名 to 用户名; 查看当前用户 ...

  2. js小数加减乘除时精度不准确

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_33237207/article/d ...

  3. Excel在线预览(通过poi转html,含里面的图片)

    支持03和07excel转html,直接上代码 测试类 /** * 主方法 * @author asus * */ public class App2 { public static void mai ...

  4. 阿里巴巴 Kubernetes 应用管理实践中的经验与教训

    作者 | 孙健波(阿里巴巴技术专家).赵钰莹 导读:云原生时代,Kubernetes 的重要性日益凸显.然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自 ...

  5. mysql免安装包配置

    最近在通过zip包配置mysql,mysql版本:5.7.13.配置过程中,踩了一些坑,下面做了一些简单的记录,配置的具体过程如下: 1.将mysql zip包解压,放到指定目录中,在系统环境变量中配 ...

  6. Kong02-KongA 介绍

    KongA 是 Kong 的一个 GUI 工具.GitHub 地址是 https://github.com/pantsel/konga . KongA 概述 KongA 带来的一个最大的便利就是可以很 ...

  7. [BZOJ] DZY Loves Math 系列 I && II

    为了让自己看起来有点事干 ,做个套题吧..不然老是东翻翻西翻翻也不知道在干嘛... \(\bf 3309: DZY \ Loves \ Math\) 令 \(h=f*\mu\) 很明显题目要求的就是\ ...

  8. NOIP模拟 4

    T1没开longlong T2忘了有向... T3是个好题,可以说将复杂度从N^2优化到NlogN是一个质的飞跃 考虑分治(要想出log可不就要分治么!(segtree也行 但我不会) 对于一个分治区 ...

  9. MinIO 参数解析与限制

    MinIO 参数解析与限制 MinIO server 在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json 文件中. 以下部分提供每个字段的详细说明以及如何自定义它们 ...

  10. git 生成密匙时遇到报错 :Too many arguments.

    今天在我用新电脑想要向github上的远程库上传项目时,由于新电脑上的本地库没有与远程库建立连接,所以要在本地生成密匙添加到github上才可以上传,在我执行命令 ssh-keygen -t rsa- ...