Java 程序性能优化《第一章》Java性能调优概述 1.2性能调优的层次

Java 程序性能优化《第一章》1.2性能调优的层次

为了提升系统性能,开发人员开始从系统各个角度和层次对系统进行优化。除了最常见的代码优化外,在软件架构上、JVM虚拟机层、数据库以及操作系统层面都可以通过各种手段进行优化,从而在整体上提升系统的性能。

1.2.1 设计调优

设计调优处于所有调优手段的上层,它往往需要在软件开发之前进行。在软件开发之处,软件架构师就应该评估系统可能存在的各种潜在问题,并给出合理的设计方案。由于软件设计和架构对整体质量有决定性的影响,所以,设计调优对系统性能的影响也是最大的。如果说,代码优化、JVM优化都是对系统微观层面上 “ 量 ” 的优化,那么设计优化就是对系统在宏观层面上 “ 质 ” 的优化。

设计优化的一大显著特点是,它可以规避某一个组件的性能问题,而非改良该组件的实现。比如,系统中组件A需要等待事件E才能触发的行为。如果组件A通过循环监控不断监测事件E是否发生,其监测行为必然会占用部分系统资源,因此,开发人员必须在监测频率和资源消耗取得平衡。如果监测频率太低,虽然减少的资源的消耗,但是系统实时反应性就会降低。如果进行代码层的调优,就需要优化监测方法的实现以及求得一个最为恰当的频率。

而若将次问题预留在设计层解决,便可以使用事件通知的方式将系统行为进行倒置。如使用第2章中提到的观察者模式,在事件E发生的时刻,有事件E通知组件A,从而触发组件A的行为。这种设计方法弃用了存在性能隐患的循环监控,从根本上解决了这一问题。

从某种角度上来说,设计优化直接决定了系统的整体品质。如果在设计层考虑不周到,留下太多问题隐患,那么这些 “ 质 ” 上的问题,也许无法再通过代码层的优化进行弥补。因此,开发人员必须在软件设计之初,认真仔细考虑软件系统的性能问题。

进行设计优化时,设计人员必须熟悉常用的软件设计方法、设计模式、基本性能组件、和常用优化思想,并将其有机地集成在软件系统中。

ps:一个良好的系统设计可以规避很多潜在的性能问题。因此尽可能的多花些时间在系统设计上,是创建高性能程序的关键。

1.2.2 代码调化

代码调优是在软件开发过程中,或许在软件开发完成后,软件维护过程中进行的对程序代码的改进和优化。代码优化设计诸多编程技巧,需要开发人员熟悉相关语言的API,并在合适的场景中正确的使用相关API或类库。同时,对算法、数据结构的灵活运用,也是代码优化的重要内容。

虽然代码优化是从微观上对性能的进行调整,但是一个 “ 好 ” 的实现和一个 “ 坏 ” 的实现对系统的影响也是非常大的。比如,同样作为List的实现,LinkedList 和 ArrayList 在随机访问上的性能却可以相差几个数量级;又如,同样是文件读写的实现,使用 Stream 方式与 Java NIO 的方式,其性能可能又会相差一个数量级。

因此,虽然与设计优化相比,笔者将代码优化称为在微观层面上的优化,但是它却是对系统性能产生最直接影响的优化方法。

1.2.3 JVM 调优

由于Java 软件总是运行在JVM虚拟机之上,对JVM虚拟机进行优化也能在一定程度上提升Java程序的性能。JVM调优通常可以在软件开发后期进行,如在软件开发完成,或者在软件开发的某一个里程碑阶段。

作为Java 软件的运行平台,JVM的各项参数将会直接影响Java程序的性能。比如,JVM的堆大小、垃圾回收策略等。

要进行JVM层面调优,需要开发人员对JVM的运行原理和基本内存结构有一定了解。如,堆内存的结构、GC的种类等。然后依据应用程序的特点,设置合理的JVM启动参数。

1.2.4 数据库调优

对绝大多数应用系统而言,数据库是必不可少的一部分。Java程序可以使用JDBC方式连接数据库。对数据库的调优可以分为3个部分:

  • 在应用层对SQL语句进行优化。
  • 对数据库进行优化。
  • 对数据库软件进行优化。

在应用层优化数据库访问,涉及大量的编程技巧。比如,当使用JDBC进行查询时,对于大量的拥有相同结构的SQL查询,可以使用PreparedStatement 代替 Statement ,以提高数据库的查询效率;在SELECT语句中,显示指定要查询的列名,避免使用星号 “ * ” 。

在对数据库进行优化时,主要目的是建立一个具有良好表结构的数据库。比如,为了提高多表级联查询效率,可以合理的使用冗余字段;对于大表,可以使用行的水平切割或者类似Oracle分区表的技术;为了提高数据库查询效率,可以建立有效且合理的索引。

对于数据库软件的优化,根据不同的数据库,如 Oracle、MySQL或者SQL Server 都拥有不同的方式。以Oracle 为例,设置合理大小的共享池、缓存缓冲区或者PGA,对Oracle的运行性能都有很大的影响。

鉴于本书的讨论范围,数据库优化将不作为本书的阐述重点。

1.2.5 操作系统优化

作为软件运行的基础平台,操作系统的性能对应用系统也有较大的影响。不同类型的操作系统,调优手段和参数可能会有所不同。比如,在主流的UNIX系统中,共享内存段、信号量、共享内存最大值(shmmax)、内存共享最小值(shmmin)等都是可以进行优化的系统资源。此外,如最大文件句柄数、虚拟内存大小、磁盘的块大小等参数都可能对软件的性能产生影响。图1.5展示了在Windows平台上,配置虚拟内存的界面。

图 1.5 Windows 下设置虚拟内存

ps:操作系统的性能调优不在本书的讨论范围内,有兴趣的读者可以参考相关书籍。

时间: 2024-08-03 13:04:35

Java 程序性能优化《第一章》Java性能调优概述 1.2性能调优的层次的相关文章

《Oracle数据库性能优化方法论和最佳实践》——1.7 Oracle性能优化的神话和误区

1.7 Oracle性能优化的神话和误区 Oracle性能优化工作是Oracle数据库科学最为神秘莫测的领域,自然也就会流传着各种传言和八卦.本书最主要的目的就是真正使Oracle性能优化成为一门严谨的科学,使任何阅读并且理解本书内容的读者可以比较简单地完成Oracle性能优化工作,使自己在其他人面前成为"巫师"或"神秘的对象".1.7.1 艺术和科学 从百度.Google等网站搜索"性能优化艺术",会出现大量的条目,部分Oracle性能优化的图

Java 程序性能优化《第一章》Java性能调优概述 1.1性能概述

Java 程序性能调优<第一章>Java性能调优概述(1.1性能概述) 1.1 性能概述 为什么程序总是那么慢?它现在到底在干什么?时间都花在哪里了?也许,你经常会抱怨这些问题,如果是这样,那说明你的程序出了性能问题.和功能问题相比,性能问题在有些情况下,可能不算什么大问题,将就将就,也就过去了.但是严重的性能问题会导致程序瘫痪.假死.直至崩溃.本书就先来认识性能的各种表现和指标. 1.1.1 看懂程序的性能 对客户端程序而言,拙劣的性能会严重影响用户体验,界面停顿.抖动.响应迟钝等问题会遭到

Java 程序性能优化《第一章》Java性能调优概述 1.3基本调优策略和手段

Java 程序性能优化<第一章>1.3基本调优策略和手段 存在性能问题的系统,十之八九是由于某一系统瓶颈导致的.只要找到该性能瓶颈,分析瓶颈的形成原因,对症下药,使用合理的方法解决系统瓶颈,就能从根本上提升性能.所以,系统性能优化的最主要目的就是查找并解决性能瓶颈问题.但同时值得注意的是,性能优化往往会涉及对原有的实现进行较大的修改,因此,很难保证这些修改不引入新的问题.所以,在性能优化前,需要对性能优化的目标.方法进行统筹的安排. 1.3.1 优化的一般步骤 对软件系统进行优化,首先需要有明

《Oracle数据库性能优化方法论和最佳实践》——1.4 Oracle性能优化工作的分类

1.4 Oracle性能优化工作的分类 在Oracle上进行性能优化时,不同场景下的优化工作方法和内容有很大的不同.下面从实践角度来展开优化工作的分类.1.4.1 上线优化或从未达到过性能期望的系统优化如果业务系统未进行充分的性能测试就上线,那么有相当一部分会出现性能问题,不会出现性能问题的系统往往建立在有强大硬件的基础之上.这类缺乏性能设计考虑的业务系统部分或全部具有以下特点.开发人员(业务系统)假设资源是无限的,可以任意使用,忘记了任何系统都是在一个资源受限的系统中运行业务.开发人员(业务系

Java 7: 全面教程-第一章节: Java初体验

开发一个Java程序关系到写代码,编译成字节码(bytecode), 和运行字节码.作为一个Java项目开发者将要一直重复做这些事情,所以做这个的时候你要感到舒适是很重要的.而此章节主要目标是让你趁此机会体验Java软件的开发过程. 写代码的关键不仅仅是要让它运做,还要让它方便阅读和维护,此章节介绍了Java 代码的规格.还有,自从聪明的开发者们使用了集成开发环境(Integrated Development Environment,简称IDEs) 使开发变得更简单了,所以此章节的最后一个小节给

CYQ.Data 轻量数据层之路 MDataTable 绑定性能优化之章(十一)

昨天jyk进群后,用Microsoft Application Center Test 对CYQ.Data 框架进行进行了一下压力测试 然后截了几张图上来,只有纯图如下: 1:使用了框架:sql 2000的分页存储过程[临时表分的页]: 2:把存储过程直接换成select语句: 3:他的框架测试结果: 4:这是测试结果了. 以下是说明: 1.DataTable :714次/秒 2.MDataTable:559 次/秒 (简单存储过程) 3.MDataTable:500 次/秒 (完整存储过程)

第一章 Java Web工作原理

一:在本章我们将学到如下的内容 >HTTP协议原理 >服务器端Web编程原理 >Servlet与Web容器 >Java Web应用程序的组成 >Tomcat介绍   一:1.1解析HTTP协议 HTTP:超文本传输协议(HyperText Transfer Protocol) HTTP是一种无状态的协议,意思是指在Web浏览器和Web服务器之间不需要建立持久的连接. HTTP是遵循请求/响应(Request/Response)模型的. HTTP处理流程:     1.1.1建

JAVA数据结构与算法-第一章-综述

面向对象的思想: package com.zzk.cn; class BankAccount { private double balance;//账户余额 public BankAccount(double openingBalance) {//构造函数 balance=openingBalance; } public void deposit(double amount) {//存钱 balance=balance+amount; } public void withdraw(double

Java程序基本优化

1.尽量指定类的final修饰符,因为带有final修饰符的类是不可派生的. 2.尽量重用对象. 3.尽量使用局部变量. 4.不要重复初始化变量. 5.在Java+Oracle的应用系统开发中,Java中内嵌的SQL语句应尽量使用大写,以减轻Oracle解析器解析的负担. 6.在Java编程过程中进行数据库连接.I/O流操作时务必小心,使用完毕后应及时关闭以释放资源. 7.JVM(Java虚拟机)有自身的GC(垃圾回收机制),但并非十分机智.用户对象后手动设置成null. 8.在使用同步机制时,