Java性能调优概述
目录
Java性能调优概述
性能优化有风险和弊端,性能调优必须有明确的目标,不要为了调优而调优!!!盲目调优,风险远大于收益!!!
程序性能的主要表现点
- 执行速度:程序的反映是否迅速,响应时间是否足够短
- 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏
- 启动时间:程序从运行到可以正常处理业务需要花费多少时间
- 负载承受能力:当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓
衡量程序性能的主要指标:
- 执行时间:程序从运行到结束所使用的时间
- CPU时间:函数或者线程占用CPU的时间
- 内存分配:程序在运行时占用内容的空间
- 磁盘吞吐量:描述I/O的使用情况
- 网络吞吐量:描述网络的使用情况
- 响应时间:系统对用户行为或者事件做出响应的时间,响应时间越短,性能越好
有可能成为系统性能瓶颈的几个方面:
- 磁盘I/O:磁盘I/O读写的速度比内容慢很多,如果程序中需要等待磁盘I/O处理,低效的磁盘I/O操作会拖累整个系统
- 网络操作:由于网络环境的不确定性,导致网络数据读写的操作可能比本地磁盘I/O更慢,如果,网络操作处理不当,也回成为系统瓶颈
- CPU:对计算资源要求较高的应用,由于长时间、不间断地大量占用CPU资源,那么对CPU的争夺将导致系统性能问题
- 异常:Java中的异常捕获和处理都是非常消耗资源的,如果代码中高频率的异常处理,那么代码的整体系统能就会明显下降
- 数据库:大量数据对数据库的读写操作是相当费时的,而往往很多代码中需要等到数据库操作完成之后才可以进行后续操作,这种缓慢的同步操作也将会成为系统瓶颈
- 锁竞争:对于高并发的系统来讲,锁竞争是相当激烈的,这对性能是一个极大的打击,锁竞争会明显增加线程上下文切换的开销,而往往这些开销都是与应用需求无关的系统开销,白白占用CPU资源,带来不了任何好处
- 内存:一般情况,只要应用程序设计合理,内存在读写速度上不太可能成为性能瓶颈。除非程序中进行了高频率的内存交换和扫描。内存成为系统瓶颈的最可能的情况就是内存大小不足。如果应用程序中将一些常用的核心数据存入内存,这个一定程度上会降低程序性能,因此,在将常用数据写入内存的时候,要注意一些优化处理
性能调优的层次
- 设计调优:处于所有调优手段的上层,在软件开发之前进行,软件设计和架构对软件整体质量有决定性的影响,所以,设计调优对系统性能的影响也是最大的。其他方面的优化都是对系统微观层面上量的优化,而设计优化是对系统在宏观方面上质的优化。一个良好的系统设计可以规避很多潜在的性能问题,因此,尽可能多花时间在系统设计上,是创建高性能程序的关键
- 代码调优:发生在软件开发的过程中、软件开发完成后、软件维护过程中,对代码进行改进和优化,要求开发员熟悉语言的API、在合适场景使用正确的API、对算法和数据结构灵活运用
- JVM调优:需要对JVM运行原理和基本内存结构有一定了解,然后依据应用程序的特点,设置合理的JVM启动参数
- 数据库调优:主要包括在应用层对SQL语句进行优化,对数据库进行优化(设计具有良好表结构的数据库),对数据库软件进行优化(比如使用Oracle数据库,需要设置合理大小的共享池、缓存缓冲区等)
- 操作系统调优:不同类型的操作系统,调优的手段和参数可能会有所不同。在主流额UNIX系统中,共享内存段、信号量、共享内存最大值、共享内存最小值等都是可以进行优化的系统资源
基本调优策略和手段
- 明确性能优化的目标,确定优化的对象和最终目的(首先定位到系统的性能瓶颈,确定相关代码进行代码优化,如已无代码优化空间,则要考虑其他方面的优化:JVM优化、数据库层面的优化、操作系统层面的优化等)
- 对性能优化要进行严格的测试
原文地址:https://segmentfault.com/a/1190000017066702
Java性能调优概述的更多相关文章
- 第一章 -- Java性能调优概述
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 1.概述 2 ...
- Java程序性能优化读书笔记(一):Java性能调优概述
程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承 ...
- Java性能调优:利用JMC分析性能
Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...
- Java性能调优攻略全分享,5步搞定!(附超全技能图谱)
对于很多研发人员来说,Java 性能调优都是很头疼的问题,为什么这么说?如今,一个简单的系统就囊括了应用程序.数据库.容器.操作系统.网络等技术,线上一旦出现性能问题,就可能要你协调多方面组件去进行优 ...
- Java性能调优笔记
Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多. ...
- Java性能调优(一):调优的流程和程序性能分析
https://blog.csdn.net/Oeljeklaus/article/details/80656732 Java性能调优 随着应用的数据量不断的增加,系统的反应一般会越来越慢,这个时候我 ...
- Java性能调优:利用JFR生成性能日志
Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JFR生成 ...
- 第六章 Java性能调优工具(待续)
Java性能调优工具 Windows工具 JDK命令行工具 JConsole工具 Visual VM多合一工具 Visual VM对QQL的支持 MAT内存分析工具 MAT对QQL的支持 JProfi ...
- java 性能调优和GC
JAVA 性能调优和GC http://blog.csdn.net/gzh0222/article/details/7663181 JAVA GC调优手记 http://blog.csdn.net/f ...
随机推荐
- CCF2016.4 - C题
思路:先把路径按反斜杠split成数组,然后用一个ArrayList去模拟.如果遇到空或者.则不处理:如果遇到..则删除ArrayList最后一个元素(注意如果只有1个元素则不删除):其他情况直接加到 ...
- 9-25模拟赛 By cellur925
1.相遇(railway.cpp/c/pas)时间限制:1s内存限制:256MB[问题描述]已知我国有 n 座城市,这些城市通过 n-1 条高铁相连.且任意两个城市联通.小 A 想从 x1 号城市出发 ...
- php 缩略图
<!DOCTYPE html><!-- HTML5表单 --><form method="post" action="" enct ...
- solr的多条件组合查询和solr的范围查询【转】
solr的多条件组合查询和solr的范围查询 版权声明:本文为博主原创文章,供大家参考,但不要抄袭哦! 存在问题:为了减轻数据库的访问压力,往往我们将必要的数据存储到solr中,并给部分字段建立索引, ...
- android开发学习 ------- 【转】EventBus的学习理解
EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信. 比如请求网络,等网络返回时通过Handler或Broadca ...
- datetime 模块详解
1.import datetime 常用方法: ttimedelta() 括号里默认为days,进行别的单位运算可以加上如hours = 1这样.除了进行减法运算,还可以进行加法运算. >> ...
- 亲身经历,Java面试题整理
博主在2015年暑期参加过一些Java开发工程师实习的面试和笔试,在此将重点整理出来,以供大家学习. 资料1: 一.单继承 1.1Java类是否支持多重继承? 答:继承的基本原则是: 子类继承父类的所 ...
- js中传统事件绑定模拟现代事件处理
大家都知道,IE中的现代事件绑定(attachEvent)与W3C标准的(addEventListener)相比存在很多问题, 例如:内存泄漏,重复添加事件并触发的时候是倒叙执行等. 下面是用传统事件 ...
- RHEL5.8上SAMBA源码修改打包安装流程
之前一直使用系统自带的SAMBA,近期需要对SAMBA代码做一些修改,然后还是打算用RPM包的方式来安装部署. 这个流程本身不复杂,在这里记录下来,免得在另外写说明文档. 关键词:RHEL5.8, s ...
- android应用流量信息提取
Linux 系统下所有的信息都是以文件的形式存在的,所以应用程序的流量信息也会被保存在操作系统的文件中.Android 2.2 版本以前的系统的流量信息都存放在 proc/net/dev(或者 pro ...