Java性能调优概述

 更新时间:2017年02月04日 16:30:20   作者:九朗的码农生活  
本文介绍了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优化、数据库层面的优化、操作系统层面的优化等)
  • 对性能优化要进行严格的测试

总结

性能优化有风险和弊端,性能调优必须有明确的目标,不要为了调优而调优!!!盲目调优,风险远大于收益!!!

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • Java技巧分享之利用RxJava打造可观测数据RxLiveData

    Java技巧分享之利用RxJava打造可观测数据RxLiveData

    这篇文章主要来和大家分享一个Java技巧,那就是利用RxJava打造可观测数据RxLiveData,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Java实现简易HashMap功能详解

    Java实现简易HashMap功能详解

    这篇文章主要介绍了Java实现简易HashMap功能,结合实例形式详细分析了Java实现HashMap功能相关原理、操作步骤与注意事项,需要的朋友可以参考下
    2020-05-05
  • 在Spring Boot中从类路径加载文件的示例

    在Spring Boot中从类路径加载文件的示例

    创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件;war和jar的加载文件格式是不一样的,在下面,您将找到在WAR和JAR中加载文件的解决方案。
    2020-10-10
  • Spring Boot集成sa-token的项目实践

    Spring Boot集成sa-token的项目实践

    本文主要介绍了Spring Boot集成sa-token的项目实践,实现了基本的登录和权限控制功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • springboot实现微信扫码登录的项目实践

    springboot实现微信扫码登录的项目实践

    微信扫码功能是目前第三方登录常见功能,前不久有个项目刚好用上,本文主要介绍了springboot实现微信扫码登录的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Java实现简单的扫雷小程序

    Java实现简单的扫雷小程序

    这篇文章主要为大家详细介绍了Java实现简单的扫雷小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Java构造器方法深入理解

    Java构造器方法深入理解

    这篇文章主要介绍了Java构造器方法深入理解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java简单实现约瑟夫环算法示例

    Java简单实现约瑟夫环算法示例

    这篇文章主要介绍了Java简单实现约瑟夫环算法,简单描述了约瑟夫环问题,并结合实例形式分析了Java实现约瑟夫环的具体操作技巧,需要的朋友可以参考下
    2017-09-09
  • 如何基于java向mysql数据库中存取图片

    如何基于java向mysql数据库中存取图片

    这篇文章主要介绍了如何基于java向mysql数据库中存取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 如何基于SpringBoot实现人脸识别功能

    如何基于SpringBoot实现人脸识别功能

    人工智能时代的到来,相信大家已耳濡目染,虹软免费,离线开放的人脸识别SDK,正推动着全行业进入刷脸时代,下面这篇文章主要给大家介绍了关于如何基于SpringBoot实现人脸识别功能的相关资料,需要的朋友可以参考下
    2022-05-05

最新评论